如何阅读命名空间标签&#34; <a:a>&#34;来自XSLT中的XML?

时间:2018-03-22 12:10:43

标签: xml xslt xpath xslt-1.0 xslt-2.0

我试图将XSLT用于下面给出的 XML -

<?xml version="1.0" encoding="UTF-8"?>
<a:catalog>
<a:cd>
    <a:title>Empire Burlesque</a:title>
    <a:artist>Bob Dylan</a:artist>
    <a:country>USA</a:country>

</a:cd>
<a:cd>
    <a:title>Hide your heart</a:title>
    <a:artist>Bonnie Tyler</a:artist>
    <a:country>UK</a:country>
</a:cd>
</a:catalog>

以下是我的 XSLT ,我正在尝试运行以获取a:titlea:artist

<?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>My test XSLT</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th style="text-align:left">Title</th>
      <th style="text-align:left">Artist</th>
    </tr>
    <xsl:for-each select="a:catalog/a:cd">
    <tr>
      <td><xsl:value-of select="a:title"/></td>
      <td><xsl:value-of select="a:artist"/></td>
    </tr>
    </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

在没有命名空间的情况下,我可以获得输出但不能使用命名空间。 或者我应该从XML编写代码来删除命名空间吗?

1 个答案:

答案 0 :(得分:1)

您的XML和XSLT都必须声明所有名称空间都在使用中。

(不, 编写代码来删除命名空间。命名空间在XML词汇表定义和管理中起着重要作用。)

而是添加名称空间声明,例如

xmlns:a="http://example.com/a"

到XML和XSLT文件中的根元素。

请注意,在XML文档中使用名称空间前缀而不定义它会阻止XML文档成为namespace-well-formed