XSLT:在嵌套时获取属性值

时间:2014-09-19 14:26:40

标签: html xml xslt nested

您好, 我试图使用xslt从xml中提取属性值。片段在下面。

XSlt从属性中提取数据。在循环中用于提取属性数据。

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <h2>My CD Collection</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Title</th>
            <th>Artist</th>
          </tr>
          <tr>
            <xsl:choose>
              <xsl:when test="//catalog/cd/title/artist/country/item/@id='mod1'">
                <td>asdfg</td>
                <xsl:choose>
                  <xsl:when test="//catalog/cd/title/artist/country/item/item/@id='up1'">
                    <td>
                      <xsl:value-of select="//catalog/cd/title/artist/country/item/item/@value" />
                    </td>
                  </xsl:when>
                  <xsl:otherwise/>
                </xsl:choose>
              </xsl:when>
              <xsl:otherwise/>
            </xsl:choose>
          </tr>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

要解析的XML数据。

<?xml version="1.0" encoding="utf-8"?>
<!-- Edited by XMLSpy -->
<catalog>
  <cd>
    <title>
      <artist>
        <country>

          <item type="layer" id="mod" title="Mod" result="pass">
            <item type="measure" id="up" title="Up" value="10" unit="dBm" />
            <item type="measure" id="down" title="Down" value="9.6" unit="dBm" />

          </item>

          <item type="layer" id="mod1" title="Mod1" result="pass">
            <item type="measure" id="up1" title="Up" value="100" unit="dBm" />
            <item type="measure" id="down1" title="Down" value="9.60" unit="dBm" />

          </item>

        </country>
      </artist>
    </title>
  </cd>

</catalog>

下面的预期输出和实际输出:

Expected output:

My CD Collection

Title  |    Artist
asdfg  |    100




Actual Output:

My CD Collection

Title  |    Artist
asdfg  |    10

非常感谢解决方案。提前致谢。

1 个答案:

答案 0 :(得分:0)

基本上,XSLT中的逻辑是:

  • 如果任何项目ID为mod1
    • 然后显示一个表格单元格,其值为&#34; asdfg&#34;
    • 如果任何项目的商品ID为up1
    • 然后显示文档中第一项项目的value属性

要完成您要做的事情,您可以这样做:

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <h2>My CD Collection</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Title</th>
            <th>Artist</th>
          </tr>
          <tr>
            <xsl:variable name="mod1"
                          select="//catalog/cd/title/artist/country/item[@id = 'mod1']" />
            <xsl:if test="$mod1">
              <td>asdfg</td>
              <xsl:variable name="up1" select="$mod1/item[@id = 'up1']" />
              <xsl:if test="$up1">
                <td>
                  <xsl:value-of select="$up1/@value" />
                </td>
              </xsl:if>
            </xsl:if>
          </tr>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

正如XSLT所说的那样,这并不代表XSLT写得很好,但我把它作为一个例子,因为我认为这不是你的最终目标而你正在尝试这样做迈向最终目标的一步。

下一步,我建议开一个新问题。