Skip to main content
 首页 » 编程设计

xml之无法选择附加命名空间的节点

2025年12月25日19cloudgamer

我有以下 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 选择主题节点
<?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 属性不匹配。但是,如果我从主题节点中删除命名空间,它将正确选择数据。

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

请您参考如下方法:

您需要为 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>