如何在XML中定义前缀并在XSL中使用它们?

时间:2019-01-27 13:02:34

标签: xml xslt

我在使用前缀时遇到麻烦。 XML显示标题和标题,其余为空白。

我尝试在XSL和xml的不同位置以及使用不同的URI定义前缀。 Tbh我不太了解URI的用法。在哪里可以找到好的?和/或我的代码中还有其他错误吗?我尝试搜索类似的问题,但听不懂:/

这是XML文件的代码:

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="testsortalpha.xsl"?>

<catalog xmlns:ccc="http://www.w3.org" xmlns:aaa="http://www.w3.org">

<ccc:bbb>

<aaa:entry><b>def</b></aaa:entry>

<aaa:entry><b>abc</b></aaa:entry>

<aaa:entry><b>cde</b></aaa:entry>

<aaa:entry><b>bcd</b></aaa:entry>

</ccc:bbb>
</catalog>

这是XSL文件的代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html> 
<body>
  <h2>Test</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th style="text-align:left">Test</th>
    </tr>
    <xsl:for-each select="catalog/ccc/aaa">
      <xsl:sort select="b"/>
    <tr>
      <td><xsl:value-of select="b"/></td>
    </tr>
    </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

您需要在样式表中声明名称空间,并将其用作XPath表达式中的名称空间前缀:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:ccc="http://www.w3.org"
                xmlns:aaa="http://www.w3.org">

<xsl:template match="/">
<html> 
<body>
  <h2>Test</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th style="text-align:left">Test</th>
    </tr>
    <xsl:for-each select="catalog/ccc:bbb/aaa:entry">
      <!--                        ~~~~~~~~~~~~~~~~~ -->
      <xsl:sort select="b"/>
    <tr>
      <td><xsl:value-of select="b"/></td>
    </tr>
    </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>