XSLT for-each仅显示第一行

时间:2012-08-22 18:09:31

标签: c# xslt

美好的一天,

我有以下XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<company>
    <name>XYZ Inc.</name>
    <address1>One Abc Way</address1>
    <address2>Some avenue</address2>
    <city>Tech city</city>
    <country>Neverland</country>
    <products>
        <product id="123">Toaster</product>
        <product id="293">Oven</product>
        <product id="241">Egg Beater</product>
    </products>
</company>

和以下XSLT文件:

<table>
    <xsl:for-each select="/company/products">
        <tr>
            <td>Product:</td>
            <td>
                <xsl:value-of select="product"/>
            </td>
        </tr>
    </xsl:for-each>
</table>

但是当我运行以下C#代码时:

        string xmlFile = Path.Combine(xmlFolder, "Company.xml");
        string xsltFile = Path.Combine(xsltFolder, "Company.xslt");
        string htmlOutputFile = Path.Combine(templateFolder, "Company.html");

        XPathDocument myXPathDoc = new XPathDocument(xmlFile);
        XslCompiledTransform myXslTrans = new XslCompiledTransform(true);
        myXslTrans.Load(xsltFile);

        XmlTextWriter myWriter = new XmlTextWriter(htmlOutputFile, null);
        myXslTrans.Transform(myXPathDoc, null, myWriter);

但是当我打开生成的HTML文档时,只显示第一个产品。

<table>
    <tr>
        <td>
            Product:
        </td>
        <td>
            Toaster
        </td>
    </tr>
</table>

现在,我注意到我是否使用过“。”而不是

中的产品
<td><xsl:value-of select="."/>

然后我得到所有三个值,但是在一行上。

我错过了什么?

TIA,

COSON

1 个答案:

答案 0 :(得分:3)

你的问题是你在产品(你只有一个)中为每个人做了。你可能意味着这样的事情:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<table>
    <xsl:for-each select="/company/products/product">
        <tr>
            <td>Product:</td>
            <td>
                <xsl:value-of select="."/>
            </td>
        </tr>
    </xsl:for-each>
</table>                    
</xsl:template>

</xsl:stylesheet>