1

属性xmlns="..."があり、それが親要素である場合、データ要素値の値を照会するのが困難です。次の例は SOAP 応答の一部です。XPATH /PartyInq_v2Response/PartyInq_v2Rs_Type/*[local-name()="person"]/firstName'を使用して、名と姓の値を取得したいと考えています。しかし、それは何も返しません。クエリの前に xml からすべてのxmlns="..."を削除すると、値を返すことができ ます。例から直接名前を照会する方法を知っている人はいますか?

<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>

ありがとう

ルー

4

1 に答える 1

1

どの 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() を使用できます。

<?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" >
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/" >
        <xsl:value-of select="/s:PartyInq_v2Response/*[local-name() = 'PartyInq_v2Rs_Type']/*[local-name() = 'person']/*[local-name()='firstName']"/>
    </xsl:template>
</xsl:stylesheet>
于 2013-05-03T19:17:03.750 に答える