XML“xsl:for-each”相同的项目名称?

时间:2014-12-07 15:04:48

标签: xml xslt names

我的文件是:

 <?xml version="1.0" encoding="UTF-8" ?>
    <?xml-stylesheet type="text/xsl" href="university_style.xsl"?>
    <!DOCTYPE library SYSTEM "validator.dtd">
        <university>
            <total_faculty>13</total_faculty>
            <faculty>
                <id>1</id>
                <name>name 1</name>
                <total_chairs>9</total_chairs>
                <chairs_list>
                    <chair>name 1</chair>
                    <chair>name 2</chair>
                    <chair>name 3</chair>
    ...
                </chairs_list>
            </faculty>

        </university>

和xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
<body>
      <table border="1" cellpadding="4" cellspacing="0">
        <caption>total_faculty:<xsl:value-of select="university/total_faculty"/></caption>
        <tr bgcolor="#999999" align="center">
          <th>id</th>
          <th>name</th>
          <th>total chairs</th>
          <th>chairs</th>
        </tr>
        <xsl:for-each select="university/faculty">
          <tr>
            <td>
              <xsl:value-of select="id"/>
            </td>
            <td>
              <xsl:value-of select="name"/>
            </td>
            <td>
              <xsl:value-of select="total_chairs"/>
            </td>
            <td>
              <!--<p><xsl:value-of select="chairs_list"/></p> -->
              <xsl:for-each select="chairs_list">
                <p><xsl:value-of select="chair"/> </p>
              </xsl:for-each>
            </td>
          </tr>
        </xsl:for-each>
      </table>
</body>
    </html>
  </xsl:template>
</xsl:stylesheet>

我想在新行中显示所有元素(

主席

)。 但我看到第一个元素或全部。如果使用则所有列表都在一行中。

如果我使用:

<xsl:for-each select="chairs_list">
   <p><xsl:value-of select="chair"/> </p>
</xsl:for-each> 

我只看到列表的第一个元素。怎么解决? :)

1 个答案:

答案 0 :(得分:1)

只需将xsl:for-each更改为

即可
<xsl:for-each select="chairs_list/chair">
    <p><xsl:value-of select="."/></p>
</xsl:for-each>

结果:

<p>name 1</p>
<p>name 2</p>
<p>name 3</p>

此调整后的for-each选择chair中的所有chairs_list元素,循环遍历它们,并生成此循环的当前节点 - select="."的内容作为输出。您之前的for-each仅选择了chairs_list,因此<xsl:value-of select="chair"/>仅将此列表中的第一个chair作为输出。