2013-05-03 86 views
1

我很難查詢數據元素值的值,當屬性爲xmlns =「...」這是父母的元素。 以下示例是SOAP響應的一部分,我想通過使用XPATH獲取其名字和姓氏的值。/PartyInq_v2Response/PartyInq_v2Rs_Type/* [local-name()=「person」]/firstName'。但它什麼都不返回。如果我在查詢之前從xml中刪除所有 xmlns =「...」,它可以返回值。有誰知道如何直接從示例中查詢名字?當數據元素具有屬性時,無法使用XPath查詢** 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> 

感謝

回答

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> 

如果命名空間的網址是不知道,你可以使用本地名稱()。

<?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> 
+0

謝謝你的幫助。我正在使用XMLSpy進行測試。有沒有辦法忽略名稱空間,而不是在xlst中定義它們?因爲我們正在使用一種工具來生成SOAP模式,該模式將用於創建SOAP響應消息。每當我們重新創建這些模式時,內部命名空間(例如q10,q2)在重新生成模式期間可能會不同,即,即, q10更改爲q20。這將很難在我的xslt中定義(硬編碼)命名空間。 – Yadong 2013-05-03 19:48:46

+0

只是改變了前綴還是url?如果ony前綴被改變,這並不重要。如果URL已更改,則可以使用本地名稱。 (請參閱更新。) – 2013-05-03 20:20:10

+0

謝謝hr_117 :)但是,只要xmlns = blabla屬性爲XML,至少在XMLSPy中,Local-name()不起作用。這就是爲什麼我在這裏發佈問題。如果我刪除這些屬性,不管有沒有前綴,它都可以工作。所以也許我應該使用你給我看的第一個。 – Yadong 2013-05-03 21:02:31

相關問題