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

ALLタイムスタンプ属性のみを返します。そして、テキスト?

2つの条件すべてを含むクエリを作成するにはどうすればよいですか?AND調子。

このようなもの:

//@text and //@timestamps


201204271112 --myVideo.avi 201204271113 --myVideo.avi 201204271113
--aphoto.avi
のみを取得するには、
他のものを除外しますか?

ありがとう。

4

2 に答える 2

3

属性textを含むノードのみを取得するにはどうすればよいですか?timestamp

意味があります//*[@timestamp]/text()か?これにより、親がtimestamp属性を持つすべてのテキストノードが選択されます。

条件もXPathにあります(つまり、両方といくつかのテキストノードを持つ//video[@timestamp and text()]すべてのノードを選択します)。videotimestamp

おそらくあなたが意味したのは、symbolで使用されるノードセットの和集合|です。タイムスタンプとテキストノードの両方を取得するには、2つのクエリを結合する必要があります//@timestamp | //*[@timestamp]/text()。すべてのタイムスタンプとそのすべてのテキストノードを取得します。ただし、適切に配置できるとは思いません(最初にすべてのタイムスタンプがあり、次にすべてのテキストノードがあります)。

ある種のforループを使用して1つずつ繰り返し、タイムスタンプとテキストノードの両方を経由してposition取得するか、タイムスタンプを持つすべてのノードを取得して、後でテキストを抽出することができます(これは推奨される方法です)。 。

スペックはこれについて驚くほどよく読まれています。

于 2012-04-27T09:20:45.820 に答える
0

属性を一致させることができます:

//video[@timestamp]/text()

//video=ツリー内の任意の場所でvideoという名前のノードと一致します

[@timestamp]は述語です。つまり、ノードにはこの属性が必要です。

text()は、現在のノードのすべてのテキストノードの子を選択します

于 2012-04-27T09:23:25.397 に答える