1

我有一个 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>

在第一个 Category/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”处得到多个值

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

4

1 回答 1

0

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

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

但是,您需要对获取a1b1c1e1元素的方式进行调整,因为您将不再位于Category元素上。您必须这样做,例如:

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

或者,您可以定义一个变量来指向Category元素,并使用它。试试这个 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>
于 2013-09-02T07:28:46.867 回答