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
排除其他人?
感谢。
答案 0 :(得分:3)
如何只获取包含
text
属性的节点timestamp
?
你的意思是//*[@timestamp]/text()
吗?这将选择父项具有timestamp
属性的所有文本节点。
条件也在XPath中(即//video[@timestamp and text()]
选择同时具有video
和一些文本节点的所有timestamp
个节点。
您可能意味着与符号|
一起使用的节点集联合。要同时获取时间戳和文本节点,您需要将两个联合在一起的查询://@timestamp | //*[@timestamp]/text()
获取所有时间戳及其所有文本节点。但是,我认为你不能很好地对齐它(首先会有所有时间戳,然后是所有文本节点)。
您可以尝试使用某种for
循环逐个迭代,并通过position
获取时间戳和文本节点,或者您可以获取具有时间戳和挖掘的所有节点之后他们的文本(这是一种优先的方式)。
The spec对此非常好读。
答案 1 :(得分:0)
您可以匹配属性:
//video[@timestamp]/text()
// video =匹配树中任意位置名称视频的节点
[@timestamp]是一个谓词,意味着节点必须具有此属性
text()选择当前节点的所有文本节点子节点