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
不包括其他?

谢谢。

4

2 回答 2

3

如何仅获取text包含timestamp属性的节点?

你的意思是//*[@timestamp]/text()?这将选择其父级具有该timestamp属性的所有文本节点。

条件也在 XPaths 中(即//video[@timestamp and text()]选择video同时具有这两个timestamp节点和一些文本节点的所有节点)。

您可能的意思是与 symbol 一起使用的节点集联合|。要同时获取时间戳和文本节点,您需要将两个查询联合在一起://@timestamp | //*[@timestamp]/text()获取所有时间戳及其所有文本节点。但是,我认为您不能很好地对齐(首先是所有时间戳,然后是所有文本节点)。

您可以尝试使用某种循环逐个迭代for并通过 获取时间戳和文本节点position,或者您可以只获取所有具有时间戳的节点并稍后从中挖掘出它们的文本(这是一种首选方式) .

该规范是一个令人惊讶的好读物。

于 2012-04-27T09:20:45.820 回答
0

您可以匹配属性:

//video[@timestamp]/text()

//video = 匹配树中任意位置名为 video 的节点

[@timestamp] 是谓词,意味着节点必须具有此属性

text() 选择当前节点的所有文本节点子节点

于 2012-04-27T09:23:25.397 回答