2011-08-09 51 views
1

例1:xpath:如何將以下xml轉換爲結果數據格式?

<body> 
    <div> 
    <h1>category1</h1><a>sibling1</a><a>sibling2</a><h1>category2</h1><a>sibling3</a><a>sibling4</a> 
    </div> 
</body> 

所以他們並不比他們的單格下的其他一個共同的祖先。你將如何產生(可以用xpath表示)下面的結果字符串數據格式?

category1,sibling1,sibling2; 
category2,sibling3,sibling4; 

如果例1是這樣的:

<body> 
     <div> 
<span> 
     <h1>category1</h1><a>sibling1</a><a>sibling2</a> 
</span> 
<span> 
     <h1>category2</h1><a>sibling3</a><a>sibling4</a> 
</span> 
     </div> 
    </body> 

這裏在這種情況下,它很容易,所需一切都是通過//span XPath表達式來捕獲所有<SPAN>標籤,並期待insde每個<span>標籤爲<h1> & <a>裏面。

回答

1

您都可以使用h1//h1,然後選擇H1的兩個兄妹,即:following-sibling::*[position() < 3]

1

結果字符串是很難XPath 1.0中實現,因爲目前缺少了XPath 2.0 string-join()功能的選擇。

一般來說,如果你可以在每個H1節點上迭代,可以使用以下XPath未來H1(例如,用於第一H1)之前選擇相鄰兄弟姐妹的所有文本:

"/html/body/div/h1[1]//text() 
| 
/html/body/div/h1[1]/following-sibling::* 
[count(. | following-sibling::h1[1]/preceding-sibling::*) 
= count(following-sibling::h1[1]/preceding-sibling::*)]//text()" 

去年H1節點路徑是非常簡單的:

"/html/body/div/h1[last()]//text() 
| 
/html/body/div/h1[last()]/following-sibling::*//text()" 

在XPath 2.0可以直接連接字符串如下:

string-join(xpath,',') 

您可以在上面找到xpath。

相關問題