2017-03-08 62 views
-1

我有一個這樣的XML:無法比擬的祖先以下節點的XPath

<table> 
<tr class="mergedrow"> 
<th scope="row"><a href="https://en.wikipedia.org/wiki/Telephone_numbers_in_Austria" title="Telephone numbers in Austria">Area code</a></th> 
<td>07236</td> 
</tr> 
</table> 

我試圖讓區號:07236. 我做了什麼直到現在匹配「<一> 「與節點: // * [文本()=‘地區代碼’]

現在我需要得到祖先節點<個範圍=的兄弟」行「>這是< TD>節點。 我之所以選擇直接在文本上進行匹配是因爲表格很龐大,有數百行。

我試過// * [text()=「地區代碼」] /../ ancestor :: th至少與祖先 匹配,還有// * [text()=「地區代碼」]/../following::td。他們都不工作。

我是XPath的新手,所以我很抱歉,如果答案很明顯。

回答

0

此XPath,

//th[normalize-space() = 'Area code']/following-sibling::td/text() 

將選擇以下的td元素的"07236"文本子節點,其空間規範化字符串值是"Area code",按要求th

+0

我同意它適用於我給出的特定簡短示例,但是它與整個xml文件不匹配。我將嘗試更多並回到你身邊。非常感謝btw。 –

+0

當然,如果你具體解釋它如何不適用於真正的案例 - 錯誤消息,錯誤/額外的節點選擇等 - 我們可以嘗試改進XPath來覆蓋它。擴大範例以涵蓋相關的額外標記將是理想的。 – kjhughes

+0

我目前的問題是XML包含xmlns =「http://www.w3.org/1999/xhtml」作爲標記中的名稱空間。如果我刪除它的作品。我試圖弄清楚如何使這個命名空間工作。 –

0

我找到了。我正在使用KNIME,這是一種執行節點的數據分析工具,可以做各種事情。在執行XPath節點時,我在之前評論中寫入的名稱空間存儲在「dns」下。所以我最終的XPath表達式是:// dns:* [text()=「Area code」] /../ following-sibling :: dns:td。