【问题标题】:Unable to Select node with namespace attached无法选择附加命名空间的节点
【发布时间】:2014-06-24 14:03:42
【问题描述】:

我有以下 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 服务接收数据的方式。

【问题讨论】:

    标签: xml xslt xpath


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-30
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多