2011-06-29 11 views
2

これで、Xpathを使用してblockquoteタグからテキストを取得していますが、SPECIFICブロッククォートを選択できる必要があります。 私が必要とする2つのタイプの唯一の違いは、スパンの直後です。 のは、私が互いにテキスト1とテキスト2を取得する必要がありましょう、これはHTMLのようになります。Xpathで特定のスパンの後にblockquoteを選択する

<span id="1">some code here</span> 
<blockquote>text1</blockquote> 

more code in here 

<span id="2">some code here</span> 
<blockquote>text</blockquote> 

は、どのように私はこれを行うに行きますか?

+0

をちなみに、私は現在のテキストを取得するには、 "()// BLOCKQUOTE /ノード" を使用しています。 – spykr

+0

+1良い質問です。次回は、必要なすべての詳細を必ず追加してください。 –

+0

私は-1まで滞在します。その後、私は自分の質問を削除します。 –

答えて

1

を選択しなかった。

//span[starts-with(@id,'nothread')]/following::*[1][name()='blockquote'] 

これはすべてたかっれますblockquote要素。

は、テキストノードを取得するには:

//span[starts-with(@id,'nothread')]/following::*[1][name()='blockquote']/text() 
+0

ありがとう!これはうまく動作し、もう一方の答えよりも読みやすいです。両方とも正しい答えとして設定できますか? – spykr

+0

どうぞよろしくお願いいたします。あなたは以前のものを受け入れずにこれを受け入れることができます。 –

+0

私はやったが、今は気分が悪い。 – spykr

3

たちは、このXMLがあるとします。

<root> 
<span id="1 nothread">some code here</span> 
<blockquote>text1</blockquote> 

more code in here 

<span id="2 nothread">some code here</span> 
<blockquote>text</blockquote> 

<span id="3">some code here</span> 
<blockquote>text</blockquote> 

<blockquote>not selected text</blockquote> 
</root> 

ので、このXPathの:それはスパンの直後にあるとスパン/ @ idはnothreadが含まれている場合//blockquote[local-name(preceding::*[1]) = 'span' and contains(preceding::*[1]/@id, 'nothread')]/node()はすべてを選択します。 結果:だから、あなたが見る

  1. テキスト1
  2. テキスト

not selected textは、私が使用する

+0

ありがとうございますが、私はtext1とtextを別々に取得する必要があります。スパンIDによって。スパンIDに "nothread"が含まれているかどうかをチェックする必要があります(私のポストでこの部分を言い表すのを忘れてしまいました)。もしそうなら、後ろのblockquoteからテキストを取得します。私は何を意味するのですか? – spykr

+0

@ダーシー、私は答えを更新しました –

+0

@polishchuck:残念ながら、これは動作していません、なぜ私は分かりません。 "//blockquote [local-name(preceding :: * [1])= 'span']/node()を使用するだけでも何らかの理由で動作しません。 – spykr