Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当数据元素具有属性**xmlns=";时,无法使用XPath进行查询&引用**_Xml_Xslt_Xpath_Xml Namespaces - Fatal编程技术网

当数据元素具有属性**xmlns=";时,无法使用XPath进行查询&引用**

当数据元素具有属性**xmlns=";时,无法使用XPath进行查询&引用**,xml,xslt,xpath,xml-namespaces,Xml,Xslt,Xpath,Xml Namespaces,当数据元素及其父元素中的属性xmlns=“…”时,我很难查询数据元素值的值。 下面的示例是SOAP响应的一部分,我想通过使用XPATH/PartyInq\u v2Response/PartyInq\u v2Rs\u Type/*[local-name()=“person”]/firstName'获取它的名字和姓氏的值。但它什么也没有返回。如果我删除了所有,它可以返回值 xmlns=“…”来自查询前的xml。有人知道如何直接从示例中查询名字吗 <PartyInq_v2Response xml

当数据元素及其父元素中的属性xmlns=“…”时,我很难查询数据元素值的值。 下面的示例是SOAP响应的一部分,我想通过使用XPATH/PartyInq\u v2Response/PartyInq\u v2Rs\u Type/*[local-name()=“person”]/firstName'获取它的名字和姓氏的值。但它什么也没有返回。如果我删除了所有,它可以返回值 xmlns=“…”来自查询前的xml。有人知道如何直接从示例中查询名字吗

<PartyInq_v2Response xmlns="urn:Somewhere.Int" xmlns:q2="http://SomewhereOps.v20120719" xmlns:q10="http://SomewhereTypes.v20120719.GenericTypes">
    <PartyInq_v2Rs_Type>
        <q2:person>
            <firstName xmlns="http://SomewhereTypes.v20120719.Types">somebody</firstName>
            <lastName xmlns="http://SomewhereTypes.v20120719.Types">nobody</lastName>           
        </q2:person>
    </PartyInq_v2Rs_Type>
</PartyInq_v2Response>

某人
没有人
谢谢


Lu

不清楚您使用的是什么xslt处理器。但您必须让xlst知道所有使用的名称空间

以下xlst将执行以下操作:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:s="urn:Somewhere.Int" 
            xmlns:q2="http://SomewhereOps.v20120719"
            xmlns:q10="http://SomewhereTypes.v20120719.GenericTypes"
            xmlns:t="http://SomewhereTypes.v20120719.Types">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/" >
        <xsl:value-of select="/s:PartyInq_v2Response/s:PartyInq_v2Rs_Type/q2:person/t:firstName"/>
    </xsl:template>
</xsl:stylesheet>

如果名称空间url未知,则可以使用local-name()


不清楚您使用的是什么xslt处理器。但您必须让xlst知道所有使用的名称空间

以下xlst将执行以下操作:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:s="urn:Somewhere.Int" 
            xmlns:q2="http://SomewhereOps.v20120719"
            xmlns:q10="http://SomewhereTypes.v20120719.GenericTypes"
            xmlns:t="http://SomewhereTypes.v20120719.Types">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/" >
        <xsl:value-of select="/s:PartyInq_v2Response/s:PartyInq_v2Rs_Type/q2:person/t:firstName"/>
    </xsl:template>
</xsl:stylesheet>

如果名称空间url未知,则可以使用local-name()



谢谢您的帮助。我正在使用XMLSpy进行测试。有没有办法忽略名称空间而不是在xlst中定义它们?因为我们正在使用一个工具来生成SOAP模式,该模式将用于创建SOAP响应消息。每次,当我们重新创建这些模式时,内部名称空间(例如q10、q2)在重新生成模式的过程中每次都可能不同,即q10更改为q20。这将使在我的xslt中定义(硬代码)名称空间变得非常困难。只是前缀改变了还是url也改变了?如果只更改了前缀,这并不重要。如果更改了url,您可以像以前一样使用本地名称。(请参阅更新。)谢谢hr_117:)但是,只要XMLAS属性中的xmlns=blabla,Local-name()就不起作用,至少在XMLSPy中是这样。这就是我在这里发帖的原因。如果我删除这些属性,不管是否有前缀,它肯定会工作。所以也许我应该用你给我看的第一个。谢谢你的帮助。我正在使用XMLSpy进行测试。有没有办法忽略名称空间而不是在xlst中定义它们?因为我们正在使用一个工具来生成SOAP模式,该模式将用于创建SOAP响应消息。每次,当我们重新创建这些模式时,内部名称空间(例如q10、q2)在重新生成模式的过程中每次都可能不同,即q10更改为q20。这将使在我的xslt中定义(硬代码)名称空间变得非常困难。只是前缀改变了还是url也改变了?如果只更改了前缀,这并不重要。如果更改了url,您可以像以前一样使用本地名称。(请参阅更新。)谢谢hr_117:)但是,只要XMLAS属性中的xmlns=blabla,Local-name()就不起作用,至少在XMLSPy中是这样。这就是我在这里发帖的原因。如果我删除这些属性,不管是否有前缀,它肯定会工作。也许我应该用你给我看的第一个。