2013-06-02 32 views
0

我在這裏陷入了一種情況,其中必須使用xslt來解析和轉換給定的XML。我需要寫xpaths來做到這一點。無法獲取xpath其中父節點和子節點具有不同的默認名稱空間

示例xml在下面給出。 ServiceProviderGroupPackage和SecondNode都有不同的名稱空間。我需要獲得IReference節點的名稱空間以獲取其值。

<?xml version="1.0" encoding="utf-8" ?> 
<ServiceProviderGroupPackage Version="1.2.0" xmlns="http://webconnectivity.co.uk/ServiceProviderGroupPackage" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xmlns:wsa="http://www.w3.org/2005/08/addressing"> 
    <FirstNode Version="1.2.0" xmlns="http://www.MySite.org/Standards/MySiteMsgSvc/1" 
        xmlns:rlc="http://www.MySite.org/standards/SecondNode/1" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    </FirstNode> 
    <SecondNode Version="2010-2" xmlns:ac="http://www.MySite.org/Standards/MySiteMsgSvc/1" 
         xmlns="http://www.MySite.org/standards/SecondNode/1" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns:lloyds="http://www.lloyds.com/The-Market/Operating-at-Lloyds/Resources/Risk_codes"> 
    <Movement Sender="Sender" Receiver="Receiver"> 
     <Contract> 
     <Type>direct</Type> 
     <Nature>lm_proportional_or_nonproportional</Nature> 
     <Reference>B0509311011UMR</Reference> 
     <IReference>P00000062MM/13A</IReference> 
     </Contract> 
    </Movement> 
    </SecondNode> 
</ServiceProviderGroupPackage> 

回答

2

每個元素繼承父元素的命名空間如果沒有覆蓋,因此該IReference元件具有類似SecondNode元件,http://www.MySite.org/standards/SecondNode/1相同的命名空間。


要檢索任意元素的名稱空間,請使用namespace-uri(...)函數。

在XPath 2.0,可以使用通配符運營商*而不是一個命名空間前綴:

namespace-uri(//*:IReference) 

或也

//*:IReference/namespace-uri() 

在XPath 1.0,你將不得不檢查名稱在謂詞中:

namespace-uri(//*[local-name() = "IReference"]) 
+0

嘗試使用xpath,正如您在我的xslt中所指示的那樣。沒有運氣。它不會讀取/ * – Rakesh

+0

的組合如您所說,如果每個元素都不會覆蓋父元素的名稱空間,那麼我應該在整個xpath中沒有前綴。但不知何故不是那種方式 – Rakesh

+0

得到了......感謝您的指導。您需要將名稱空間添加到帶有前綴的xslt,然後將它們添加到xpath中,並使用該節點所屬的任何名稱空間。 – Rakesh

相關問題