2013-10-09 11 views
8

私は似たような質問を見ましたが、私が見た解決策は次の点ではうまくいかないでしょう。私はXPathの専門家からは遠いです。私はいくつかのHTMLを解析する必要があります。ヘッダ2に続くテーブルを選択するにはどうしたらいいですか?誰でもここで私を助けることができますか?xpathを使って別の要素を選択する

content = """<div> 
<p><b>Header 1</b></p> 
<p><b>Header 2</b><br></p> 
<table> 
<tr> 
    <td>Something</td> 
</tr> 
</table> 
</div> 
""" 

from lxml import etree 
tree = etree.HTML(content) 
tree.xpath("//table/following::p/b[text()='Header 2']") 

答えて

8

あなたは軸precedingを使用して、以下のXPATH 1.0を使用する必要があります。

//table[preceding::p[1]/b[.='Header 2']] 
+0

ああ空です。コードとdocsリンクをありがとう。それは役に立ちます。 – jseabold

10

アラップの答え@にいくつかの選択肢:

tree.xpath("//p[b='Header 2']/following-sibling::table[1]") 

は "ヘッダ2"

tree.xpath("//b[.='Header 2']/following::table[1]") 

を含むbヘッダを含むp以下の最初のtableの兄弟を選択における最初のtableを選択b「ヘッダ2」を含む文書オーダー

は異なる軸についての詳細は、XPath 1.0 specificationsを見る

  • 軸以下、文書順でコンテキストノードの後に​​あるコンテキスト・ノードと同じドキュメント内のすべてのノードを含みます任意の子孫を除外し、属性ノードと名前空間ノードを除外します。

  • 兄弟軸には、コンテキストノードの次のすべての兄弟が含まれます。コンテキストノードが属性ノードまたは名前空間ノードである場合、以下の-兄弟軸は大丈夫、

関連する問題