2012-04-27 41 views
0

XPath問題。僅當包含屬性時才獲取節點文本?

我有這些節點:

[...] 
<videos> 
    <video timestamp="201204271112">myVideo.avi</video> 
    <video>myVideo.avi</video> 
    <video timestamp="201204271113">myVideo.avi</video> 
    <video>myVideo.avi</video> 
    <video>myVideo.avi</video> 
</videos> 
<photos> 
    <photo timestamp="201204271112">myphoto.avi</video> 
    <photo>myphoto.avi</video> 
    <photo timestamp="201204271113">aphoto.avi</video> 
    <photo>myphoto.avi</video> 
    <photo>myphoto.avi</video> 
</photos>  
[...] 

我怎樣才能獲得唯一節點text包含timestamp屬性?

我試圖

//@timestamp 

它返回所有時間戳只讀屬性。而文字?

如何使查詢包含所有兩個條件? AND條件。

事情是這樣的:

//@text and //@timestamps 

只得到
201204271112 - myVideo.avi
201204271113 - myVideo.avi
201204271113 - aphoto.avi
排除其他的呢?

感謝。

回答

3

我怎樣才能得到包含timestamp屬性的節點text

你的意思是//*[@timestamp]/text()?這將選擇父節點具有timestamp屬性的所有文本節點。

的條件是在XPath中,太(即//video[@timestamp and text()]選擇具有兩個timestamp和一些文本節點的所有video節點)。

您可能的意思是使用符號|的節點集合。要同時獲得時間戳和文本節點,您需要將兩個查詢結合在一起://@timestamp | //*[@timestamp]/text()獲取所有時間戳記及其所有文本節點。但是,我不認爲你可以很好地對齊(首先會有所有的時間戳,然後是所有的文本節點)。

您可以嘗試使用某種for循環一個接一個循環,並通過position獲取時間戳記和文本節點,或者您可以只獲取具有時間戳記的所有節點,並稍後將其文本挖出這是一種優先的方式)。

The spec是一個驚人的好閱讀。

0

可以匹配屬性:

//video[@timestamp]/text() 

//視頻=名稱爲視頻中的節點匹配的treee

[@timestamp]是謂語,這意味着節點必須有這樣的任何地方屬性

text()選擇當前節點

+0

和更通用的所有文本子節點?請參閱編輯。 – elp 2012-04-27 09:26:06

相關問題