无法选择附加名称空间的节点

时间:2014-06-24 14:03:43

标签: xml xslt xpath

我有以下XML片段

<?xml version="1.0" encoding="UTF-8"?>
<Sheet version="1.0" xmlns:j="http://www.it.ojp.gov/jxdm/3.0.2">
    <Subject xmlns="http://www.it.ojp.gov/jxdm/3.0.2">
        <PersonName>
            <PersonGivenName>EDWIN</PersonGivenName>
            <PersonMiddleName>J</PersonMiddleName>
            <PersonSurName>TURNER</PersonSurName>
        </PersonName>
    </Subject>
</Sheet>

我尝试使用以下XSLT选择Subject节点

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
    <body>
        <xsl:value-of select="Sheet/Subject"/>
    </body>
</html>
</xsl:template>
</xsl:stylesheet>

我正在http://www.shell-tools.net/index.php?op=xslt上测试此细分受众群。

如果我使用写入的XML运行转换,则select属性不匹配。但是,如果我从Subject节点中删除命名空间,它将正确选择数据。

我正在寻找关于如何使选择与附加到Subject节点的命名空间一起工作的语法,因为这是从Web服务接收数据的方式。

1 个答案:

答案 0 :(得分:2)

您需要为sheet文档的命名空间定义别名。 xsl应如下所示:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:sheet="http://www.it.ojp.gov/jxdm/3.0.2" <--- Define an alias
    exclude-result-prefixes="sheet"                <--- Prevent xslt from using this 
                                                        namespace in the output document
>
<xsl:template match="/">
<html>
    <body>
        <xsl:value-of select="Sheet/sheet:Subject"/>   <--- Use alias
    </body>
</html>
</xsl:template>
</xsl:stylesheet>