在XML中显示XSLT中的idref

时间:2015-04-23 19:20:35

标签: xml xslt

我试图在表格中的idref引号中显示信息,这就是它在我的XML中的显示方式。

 <state id="illinois">
      <scode>IL</scode>
      <sname>Illinois</sname>
      <capital idref="springfieldi"/>
      <citiesin idref="springfieldi"/>
      <citiesin idref="bloomington"/>
      <citiesin idref="chicago"/>
      <citiesin idref="peoria"/>
      <nickname>Prairie  State</nickname>
      <population>12128370</population>
    </state>

到目前为止,我已经获得了显示其他元素的表格。这是我的XSL代码。

<table border="2">
            <tr bgcolor="grey">
                <th style="width:40px">ID</th>
                <th>Name</th>
                <th>Capital</th>
                <th>Cities</th>
                <th>Nickname</th>
                <th>Population</th>
            </tr>
            <xsl:for-each select="geography/state">
            <tr>
                <td><xsl:value-of select="scode" /></td>
                <td><xsl:value-of select="sname" /></td>
                <td><xsl:value-of select="capital" /></td>
                <td><xsl:value-of select="citiesin" /></td>
                <td><xsl:value-of select="nickname" /></td>
                <td><xsl:value-of select="population" /></td>
            </tr>
            </xsl:for-each>
        </table>

当我这样做时,资本和城市的列是空白的。此外,由于存在多个元素,每个元素都具有属性。我如何显示每个属性?任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

capitalcitiesin是输入中的元素,但您要输出的值位于idref 属性,所以你必须使用:

<td><xsl:value-of select="capital/@idref" /></td>
<td><xsl:value-of select="citiesin/@idref" /></td>

为了在使用XSLT 1.0时显示所有citiesin/@idref值,您必须使用for-each循环:

<td>
    <xsl:for-each select="capital">
        <xsl:value-of select="@idref"/>
    </xsl:for-each>
</td>

使用XSLT 2.0时,这不是必需的,因为<xsl:value-of select="citiesin/@idref" />已经返回包含所有值的序列。