首页 > 解决方案 > 如何在 XML 中定义前缀并在 XSL 中使用它们?

问题描述

我遇到了前缀问题。XML 显示标题和 th,但其余部分为空白。

我尝试在 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>

标签: xmlxslt

解决方案


您需要在样式表中声明命名空间并将它们用作 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>

推荐阅读