嵌套的xml文件到xsl文件

时间:2013-09-02 06:53:04

标签: xml xslt

我有一个xml文件,想要转换为xsl文件 xml文件的结构

<?xml version="1.0"?>
<Product>
    <Category>
      <a1>A</a1>
      <b1>B</b1>
      <c1>C</c1>
      <d1>
           <dd1>DD1</dd1>
           <dd1>DD2</dd1>
      </d1>
      <e1>E</e1>
     </Category>
     <Category>
      <a1>AA</a1>
      <b1>BB</b1>
      <c1>CC</c1>
      <d1>
           <dd1>DD3</dd1>
      </d1>
      <e1>EE</e1>
    </Category>
</Product>

这里的第一个类别/ d1有多个记录 我希望在这个所需的输出

中生成xsl文件
<table>
<th>a1</th>
<th>b1</th>
<th>c1</th>
<th>dd1</th>
<th>e1</th>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>DD1</td>
<td>E</td>
</tr>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>DD2</td>
<td>E</td>
</tr>
<tr>
<td>AA</td>
<td>BB</td>
<td>CC</td>
<td>DD3</td>
<td>EE</td>
</tr>
</table>

我已尝试使用此xsl文件

<?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="/">
  <html>
  <body>
  <h2>Product Information</h2>

  <table border="1">
    <tr bgcolor="#9acd32">
      <th>A1</th>
      <th>B1</th>
      <th>C1</th>
      <th>D1</th>
      <th>E1</th>

    </tr>
    <xsl:for-each select="Product/Category">
    <tr>
      <td><xsl:value-of select="a1"/></td>
      <td><xsl:value-of select="b1"/></td>
      <td><xsl:value-of select="c1"/></td>
      <td><xsl:value-of select="d1"/></td>
      <td><xsl:value-of select="e1"/></td>
    </tr>
    </xsl:for-each>
  </table>
</div>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

但我在“d1”

连接了多个值

有人可以帮助获得输出 提前致谢

1 个答案:

答案 0 :(得分:0)

您实际上需要为每个 dd1 元素添加一个新行,因此您需要在当前循环中嵌套 xsl:for-each 循环,以获得 dd1 元素

<xsl:for-each select="d1/dd1">

您需要对如何获得 a1 b1 c1 e1 进行调整但是,因为您将不再位于类别元素上。你必须这样做,例如:

<xsl:value-of select="../../a1"/>

或者,您可以定义一个变量以指向类别元素,并使用它。试试这个XSLT作为例子

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
  <h2>Product Information</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>A1</th>
      <th>B1</th>
      <th>C1</th>
      <th>D1</th>
      <th>E1</th>
    </tr>
    <xsl:for-each select="Product/Category">
      <xsl:variable name="Category" select="." />
      <xsl:for-each select="d1/dd1">
        <tr>
          <td>
            <xsl:value-of select="$Category/a1"/>
          </td>
          <td>
            <xsl:value-of select="$Category/b1"/>
          </td>
          <td>
            <xsl:value-of select="$Category/c1"/>
          </td>
          <td>
            <xsl:value-of select="."/>
          </td>
          <td>
            <xsl:value-of select="$Category/e1"/>
          </td>
        </tr>
      </xsl:for-each>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>