2012-09-14 126 views
1

您好,我需要幫助才能從xpath中提取XML中的信息。在特殊情況下使用XPATH提取屬性值

我將使用XPath提取一個標籤與通用keywork開始的屬性值:

<st:Testprova id='abcd'> 
    .... 
</st> 

    or 

<st:Test1prova id='defg'> 
    .... 
</st> 

我用XPath表達式:

"//*[contains(.,'prova')]/@ID" 

,但不起作用。你可以幫我嗎??

回答

2

您正在使用@ID而不是@id,這是區分大小寫的。此外,您應該使用name()來檢索節點名稱。

這個XPath表達式

//*[contains(name(),'prova')]/@id 

回報abcddefg

儘管你的XML是不正確的,它應該是:

<st:Testprova id='abcd'> 
    .... 
</st:Testprova> 
<st:Test1prova id='defg'> 
    .... 
</st:Test1prova> 
1

正確的功能在這種情況下使用是matches()

包括()甚至節點名稱可以返回真像

Testprova 
Prodprova 
UATprova 
provaTest 

,另一些曾經包含單詞PROVA。

但是,如果您知道節點名稱所在的模式,那麼matches()函數會精確過濾出所需的節點。

所以,如果我假設一個數字可能都在單詞之間出現的XPath的可以這樣寫下面

//*[matches(name(), '^Test[0-9]?prova$')]//@ID 

注:匹配功能Xpath2.0的一部分,不會在Xpath1工作。 0