2012-08-22 25 views
2

美好的一天,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

回答

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>