2

再会,

我有以下 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,

科森

4

1 回答 1

3

您的问题是您正在对产品进行 for-each (您只有一个)。你可能的意思是这样的:

<?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>
于 2012-08-22T18:18:03.197 回答