迫使XSLT来使用版本2 xslCompiledTransform [英] forcing xslt to use version 2 with xslCompiledTransform

查看:190
本文介绍了迫使XSLT来使用版本2 xslCompiledTransform的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下的XSLT

,我需要使用XSLT 2.0版本的功能,如格式日期。我如何申报XSL表中使用XsltCompiledTransform类使用版本2.0(C#.NET 4.5)

 < XSL:样式表版本=2.0
的xmlns:XSL =http://www.w3.org/1999/XSL/Transform
的xmlns =http://www.w3.org/TR/ XHTML1 /严
的xmlns:msxsl =瓮:架构 - 微软COM:XSLT'
的xmlns:VAR ='金塔:VAR'
的xmlns:JS ='金塔:JS'
>
< XSL:输出方法=HTML/>
< XSL:变量名=N选择=1/>
<的xsl:模板匹配=/ NewDataSet>
< HTML和GT;
< HEAD>
<风格>
表{边界崩溃:崩溃; FONT-FAMILY:宋体;}
表,TD {边界:1px的纯黑色;颜色:黑色;背景颜色:白色; FONT-FAMILY:宋体;}
表,日{边界:1px的固体巴尔克;背景色:黑色;颜色:白色; FONT-FAMILY:宋体; }
。RT {颜色:红色; FONT-FAMILY:宋体;}
.NT {颜色:黑色; FONT-FAMILY:宋体;}
.redb {颜色:黄色;背景色:红色; FONT-FAMILY:宋体;}
.greenb {颜色:白色,背景色:绿色; FONT-FAMILY:宋体;}
.blackb {颜色:白色,背景色:黑色; FONT-FAMILY:宋体;}
< /风格>
<标题> EDI验证结果< /标题>
< /头>
<身体GT;
< p =类NT>跨度类=RT>
的PO<的EDI验证结果< XSL:选择=信息/ PONO/>值的;< / SPAN>收到
来自以下; XSL:选择=信息/客户名称/>值的;.
< / P>

<表>
百分位类=blackb>&位置LT; /第i
百分位类=blackb>项目代码和LT; /第i
百分位类=blackb>计量单位< /第i
百分位类=blackb>订购数量< /第i个
百分位类=blackb>船舶请求< /第i
百分位类=blackb>净引用< /第i
百分位类=blackb>净目录< /第i
百分位类=blackb>状态和LT; /第i
<的xsl:for-每个选择=表>
< TR>
< XSL:选择>
<的xsl:when测试=!状态=''>
<的xsl:禁用输出转义值的=是选择=JS:IncBlines()/>
< TD类=redb><的xsl:value-of的选择=位置/>< / TD>
< TD类=redb><的xsl:value-of的选择=ItemCode/>< / TD>
< TD类=redb><的xsl:value-of的选择=计量单位/>< / TD>
< TD类=redb><的xsl:value-of的选择=QtyOrdered/>< / TD>
< TD类=redb>< XSL:选择=价值的格式日期(RequiredBy,'D1o [MNN] [Y0001]')/>< / TD>
< TD类=redb><的xsl:value-of的选择=PriceQuoted/>< / TD>
< TD类=redb><的xsl:value-of的选择=网/>< / TD>
< TD类=redb><的xsl:value-of的选择=状态/>< / TD>
< / XSL:当>
<的xsl:否则>
<的xsl:value-of的选择=JS:IncGlines()/>

< TD类=greenb><的xsl:value-of的选择=位置/>< / TD>
< TD类=greenb><的xsl:value-of的选择=ItemCode/>< / TD>
< TD类=greenb><的xsl:value-of的选择=计量单位/>< / TD>
< TD类=greenb><的xsl:value-of的选择=QtyOrdered/>< / TD>
< TD类=greenb>< XSL:选择=价值的格式日期(RequiredBy,'D1o [MNN] [Y0001]')/>< / TD>


< TD类=greenb><的xsl:value-of的选择=PriceQuoted/>< / TD>
< TD类=greenb><的xsl:value-of的选择=网/>< / TD>
< TD类=greenb><的xsl:value-of的选择=状态/>确定< / TD>

< / XSL:否则>
< / XSL:选择>
< / TR>
< /的xsl:for-每个>
< /表>

<的xsl:if测试=JS:GetBlines()及大于0>

< p =类NT>

订购验证失败,因为有<

的顺序不会processesed;的xsl:value-of的选择=JS:GetBlines()/>行错误。
< p =类RT>

中的P.O被拒绝按约定处理规则。


< / P>
< / P>

< / XSL:如果>

<的xsl:if测试=JS:GetBlines()及。1>
< p =类NT>
成功地验证顺序。
将电子邮件订货Acknoledgement(非EDI)不久。
< / P>
< / XSL:如果>

< /身体GT;
< / HTML>
< / XSL:模板>
< msxsl:脚本语言=JScript的农具前缀='JS'>

将[CDATA [
变种Y:!INT = 0;
VAR blines:= 0;
VAR glines:= 0;
功能股份有限公司(电流)
{J = J +电流;

返回J +电流;
}
功能IncBlines()
{
blines ++;
}
功能IncGlines()
{
glines ++;
}

功能GetBlines()
{
返回blines;
}
功能GetGlines()
{
返回glines;
}
]]≥
< / msxsl:脚本>
< / XSL:样式>


解决方案

微软的XslCompiledTransform是一个XSLT 1.0处理器。使用XSLT 2.0和.NET,你有两个第三方选项,撒克逊9从 HTTP .NET版本://撒克逊.sourceforge.net / XmlPrime 。撒克逊了他和两个商业版本PE和EE,XmlPrime用于商业用途需要许可证的开源版本。


I have following xslt , I need to use xslt version 2.0 functions like 'format-date'. How do I declare the Xsl sheet to use version 2.0 using XsltCompiledTransform class (c#, .net 4.5).

 <xsl:stylesheet version="2.0"
               xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
               xmlns="http://www.w3.org/TR/xhtml1/strict"
               xmlns:msxsl='urn:schemas-microsoft-com:xslt' 
               xmlns:var='urn:var' 
               xmlns:JS='urn:JS'
                >
  <xsl:output method="html"/>
  <xsl:variable name="n" select="1"/>
  <xsl:template match="/NewDataSet">
    <html>
      <head>
        <style>
          table{border-collapse:collapse;font-family:"Verdana";}
          table,td{border:1px solid black;color:black; background-color:white;font-family:"Verdana";}
          table,th{border:1px solid balck;background-color:black;color:white;font-family:"Verdana"; }
          .rt{color:red;font-family:"Verdana";}
          .nt{color:black;font-family:"Verdana";}
          .redb{color:yellow; background-color:red;font-family:"Verdana";}
          .greenb{color:white;background-color:green;font-family:"Verdana";}
          .blackb{color:white;background-color:black;font-family:"Verdana";}
        </style>
        <title>EDI validation Result </title>
      </head>
      <body>
        <p class="nt">
          EDI validation result  of the PO <span class="rt"><xsl:value-of select="info/pono"/></span>
          received from <xsl:value-of select="info/CustomerName"/>.
        </p>

        <table>
           <th class="blackb" >Position</th>
          <th class="blackb"> Item Code </th>
          <th class="blackb">UoM</th>
          <th class="blackb"> Ordered Qty .</th>
          <th class="blackb">Ship Request</th>
          <th class="blackb"> Net-Quoted </th>
          <th class="blackb"> Net-Catalog </th>
          <th class="blackb">Status</th>
          <xsl:for-each select="Table">
            <tr>
              <xsl:choose>
                <xsl:when test="Status !=''">
                  <xsl:value-of disable-output-escaping="yes" select="JS:IncBlines()"/>
                  <td class="redb"><xsl:value-of select="Position"/></td>
                  <td class="redb"><xsl:value-of select="ItemCode "/></td>
                  <td class="redb"><xsl:value-of select="UoM"/></td>
                  <td class="redb"><xsl:value-of select="QtyOrdered"/></td>
                  <td class="redb"><xsl:value-of select="format-date(RequiredBy,'D1o [MNn] [Y0001]')"/></td>
                  <td class="redb"><xsl:value-of select="PriceQuoted"/></td>
                  <td class="redb"><xsl:value-of select="Net"/></td>
                  <td class="redb"><xsl:value-of select="Status"/></td>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:value-of select="JS:IncGlines()"/>

                  <td class="greenb"><xsl:value-of select="Position"/></td>
                  <td class="greenb"><xsl:value-of select="ItemCode"/></td>
                  <td class="greenb"><xsl:value-of select="UoM"/></td>
                  <td class="greenb"><xsl:value-of select="QtyOrdered"/></td>
                  <td class="greenb"><xsl:value-of select="format-date(RequiredBy,'D1o [MNn] [Y0001]')"/></td>


                  <td class="greenb"><xsl:value-of select="PriceQuoted"/></td>
                  <td class="greenb"><xsl:value-of select="Net"/></td>
                  <td class="greenb"><xsl:value-of select="Status"/>OK</td>

                 </xsl:otherwise>
                </xsl:choose>
            </tr>
          </xsl:for-each>
        </table>

        <xsl:if test="JS:GetBlines() &gt; 0"    >

          <p class="nt">

              The order validation has failed,

              The order will not be processesed as there are <xsl:value-of select ="JS:GetBlines()"/> lines in error.
              <p class="rt">

                The P.O is rejected as per agreed processing rules.


          </p>
          </p>

        </xsl:if>

        <xsl:if test="JS:GetBlines() &lt; 1">
          <p class="nt">
          The Order validated succesfully.
          Will e-mail Order Acknoledgement (non-edi) shortly.
          </p>
        </xsl:if>

      </body>
    </html>
  </xsl:template>
  <msxsl:script language='JScript' implements-prefix='JS'>

    <![CDATA[
    var j :int=0;
    var blines:int =0;
    var glines:int=0;
    function Inc(current)
    {j=j+current;

  return  j+current;
    }
    function IncBlines()
    {
     blines++;
    }
    function IncGlines()
    {
    glines++;
    }

    function GetBlines()
    {
    return blines;
    }
    function GetGlines()
    {
    return glines;
    }
]]>
  </msxsl:script>
</xsl:stylesheet>

解决方案

Microsoft's XslCompiledTransform is an XSLT 1.0 processor. To use XSLT 2.0 with .NET, you have two third party options, the .NET version of Saxon 9 from http://saxon.sourceforge.net/ or XmlPrime. Saxon has an open source version HE and two commercial versions PE and EE, XmlPrime for commercial use requires a license.

这篇关于迫使XSLT来使用版本2 xslCompiledTransform的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆