XSLT替换Id,获取其他节点的值

时间:2017-11-06 09:29:50

标签: xml xslt replace

嘿大家我是xml / xsl的新手。我有以下xml代码

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="Miau.xsl"?>
<export xmlns="urn:VocabularyExport">

<categories>
    <category name="A" id="123" />
    <category name="B" id="456" />
</categories>

<vocables>
    <vocable categoryId="123" spanishWord="uno" engWord="one" id="45d0a344-785b-
4463-9877-5474c99fdc74" />
    <vocable categoryId="456" spanishWord="dos" engWord="two" id="03efffbb-1cbf-
44f9-a377-74da252daac0" />
</vocables>
</export>

要在表格中显示,我有以下(工作)XSL代码:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:l="urn:VocabularyExport">

<xsl:key name="category" match="category" use="@id" />
<xsl:template match="/">
<html>
   <body>

    <h1>My Vocable Colletion</h1>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Id</th>
        <th>Deutsches Wort</th>
        <th>Spanishes Wort</th>
        <th>CategoryId</th>
      </tr>
      <xsl:for-each select="l:export/l:vocables/l:vocable">
        <tr>
          <td>
            <xsl:value-of select="@id"/>
          </td>
          <td>
            <xsl:value-of select="@germanWord"/>
          </td>
          <td>
            <xsl:value-of select="@spanishWord"/>
          </td>
          <td>
            <xsl:value-of select="@categoryId"/>
          </td>
        </tr>
       </xsl:for-each>
      </table>
     </body>
    </html>
  </xsl:template>
 </xsl:stylesheet>

而不是categoryId我想用类别名称替换它(请参阅节点categories)。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您为XML / XSLT新手开辟了一个良好的开端,因为您已经在处理XSLT中的命名空间时添加了。但是,你错过了你的钥匙。应该是这个

<xsl:key name="category" match="l:category" use="@id" />

然后,要获取类别名称,您需要的表达式为:

<xsl:value-of select="key('category', @categoryId)/@name"/>