我正在创建一个XsltArgumentList,其中我是一个字符串数组columnNameList,使用此字符串数组我正在验证columnNames并相应地打印列标题。代码如下
C#代码:
XsltArgumentList xsltArgumentList = new XsltArgumentList();
string[] columnList = new string[] { "TranNo", "DueDate", "TranType" };
XPathNavigator[] navigators =
columnList.Select(s => new XElement("column", s).CreateNavigator()).ToArray();
xsltArgumentList.AddParam("columnList", string.Empty, navigators);
Xslt代码:
<xsl:param name="columnList"/>
<tr>
<xsl:for-each select="columnList/column">
<xsl:if test="contains('TranNo', .)">
<th>Transaction #</th>
</xsl:if>
<xsl:if test="contains('DueDate', .)">
<th>Due Date</th>
</xsl:if>
<xsl:if test="contains('TranDate', .)">
<th>Date</th>
</xsl:if>
<xsl:if test="contains('TranType', .)">
<th>Type</th>
</xsl:if>
<xsl:if test="contains('PONumber', .)">
<th>PO #</th>
</xsl:if>
<xsl:if test="contains('PRONumber', .)">
<th>PRO #</th>
</xsl:if>
<xsl:if test="contains('BOLNumber', .)">
<th>BOL #</th>
</xsl:if>
<xsl:if test="contains('ReferenceNo', .)">
<th>REF #</th>
</xsl:if>
<xsl:if test="contains('Charge', .)">
<th>Invoice Amount</th>
</xsl:if>
<xsl:if test="contains('OpenAmount', .)">
<th>Open Amount</th>
</xsl:if>
</xsl:for-each>
</tr>
但它没有打印任何列。
请帮忙
答案 0 :(得分:2)
我认为您可以传入XPathNavigator[]
作为XSLT中的节点集,但是您需要确保在C#和XSLT中使用相同的参数名称,并且需要注意当您已经传入包含这些元素的节点时,路径中需要column
。除此之外,修补程序已建议您获取
XsltArgumentList xsltArgumentList = new XsltArgumentList();
string[] columnList = new string[] { "TranNo", "DueDate", "TranType" };
XPathNavigator[] navigators =
columnList.Select(s => new XElement("column", s).CreateNavigator()).ToArray();
xsltArgumentList.AddParam("columnList", "", navigators);
在C#中,<xsl:param name="columnList"/>
和<xsl:for-each select="$columnList">
在XSLT中。
答案 1 :(得分:0)
第一个问题:
<xsl:for-each select="columnList/column">
在输入XML中查找名为columnList
的元素。如果要引用参数,则需要使用:
<xsl:for-each select="$columnList/column">
第二个问题:参数是一个字符串;它没有节点。