无法将字符串数组传递给xslt并生成html文件

时间:2015-05-25 08:02:40

标签: c# arrays xml xslt

我正在创建一个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>

但它没有打印任何列。

请帮忙

2 个答案:

答案 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">  

第二个问题:参数是一个字符串;它没有节点。