2011-11-28 97 views
1

當在/data/title上應用Xpath表達式時,顯示的結果爲'所有連接','轉發詳細信息','轉發詳細信息','轉發詳細信息' , '轉發詳細信息', 'ABCD',...等等。如何僅提取Xpath中的數據匹配字符串

我的XPath表達式必須僅在/標題是 '前進詳細信息' 或 '' 正向詳細名單...

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
<title>All the connections</title> 
<List> 
    <Listitem> 
     <Price>P9909</Price> 
    </Listitem> 
</List> 
<title>Forward Detail</title> 
<List> 
    <Listitem> 
     <Price>P45</Price> 
    </Listitem> 
    <Listitem> 
     <Price>P98</Price> 
    </Listitem> 
    <Listitem> 
     <Price>P68</Price> 
    </Listitem> 
</List> 
<title>Forward Details</title> 
<List> 
    <Listitem> 
     <Price>P452</Price> 
    </Listitem> 
    <Listitem> 
     <Price>P983</Price> 
    </Listitem> 
</List> 
<title>Forward Detail</title> 
<List> 
    <Listitem> 
     <Price>P4501</Price> 
    </Listitem> 
    <Listitem> 
     <Price>P909</Price> 
    </Listitem> 
    <Listitem> 
     <Price>P899</Price> 
    </Listitem> 
</List> 
<title>Forward Details</title> 
<List> 
    <Listitem> 
     <Price>P4522</Price> 
    </Listitem> 
    <Listitem> 
     <Price>P98311</Price> 
    </Listitem> 
</List> 

這個輸入,我只提取了'Forwar的價格d細節「和」轉發細節「。我必須忽略其餘的。

請幫我爲這個框架Xpath。我使用XPath 1.0

感謝 拉姆

回答

2

您需要的條件。像/data/title[text() == 'Forward Detail']

但是我懷疑你實際上需要給定標題之前的列表,對吧?你的XML設計得非常糟糕(它的標題應該在<List>元素內),但是XPath有足夠的能力應付。您需要查看sibling軸和pos()函數。

我必須自己查看文檔,所以我只是把它作爲一個社區wiki;任何人都可以自由地重寫。

+0

是簡.. xml將嚴重形狀並且是一個巨大的文件,並需要提取一些數據。 。我得到了正確的條件..但不能提取所需的信息.. – Ramm

+0

@Ramm:看到Birei的答案。這是我想到的完整版本。 –

3

嘗試,如果下一個命令適用於您:

/data/title[text() = "Forward Detail" or text() = "Forward Details"]/following-sibling::*[1]/descendant::Price 

我的結果:

<Price>P45</Price> 
<Price>P98</Price> 
<Price>P68</Price> 
<Price>P452</Price> 
<Price>P983</Price> 
<Price>P4501</Price> 
<Price>P909</Price> 
<Price>P899</Price> 
<Price>P4522</Price> 
<Price>P98311</Price>