web-dev-qa-db-ja.com

すべてのノードのXPATHを取得します

HTMLページ内のすべてのノードのXPATHを提供できるライブラリはありますか?

26
user583726

hTMLページのすべてのノードのXPATHを提供できるライブラリはありますか

はい、このHTMLページが整形式のXMLドキュメントである場合

「ノード」で理解する内容に応じて...

//*

ドキュメント内のすべての要素を選択します。

/descendant-or-self::node()

すべての要素、テキストノード、処理命令、コメントノード、およびルートノード/

//text()

ドキュメント内のすべてのテキストノードを選択します。

//comment()

ドキュメント内のすべてのコメントノードを選択します。

//processing-instruction()

ドキュメント内のすべての処理命令を選択します。

//@* 

ドキュメント内のすべての属性ノードを選択します。

//namespace::*

ドキュメント内のすべての名前空間ノードを選択します。

最後に、共用体(|)演算子。

したがって、次の式は実際に任意のXMLドキュメントの「すべてのノード」を選択すると考えています。

/descendant-or-self::node() | //@* | //namespace::*
40

これが他の誰かに役立つ場合、python/lxmlを使用している場合は、最初にツリーが必要です。次に、上記のDimitreがリストしたXPATHパスでそのツリーを照会します。

ツリーを取得するには:

import lxml
from lxml import html, etree

your_webpage_string = "<html><head><title>test<body><h1>page title</h3>"
bad_html = lxml.html.fromstring(your_webpage_string)
good_html = etree.tostring(root, pretty_print=True).strip()
your_tree = etree.fromstring(good_html)
all_xpaths = your_tree.xpath('//*') 

最後の行で、「// *」を任意のxpathに置き換えます。 all_xpathsは、次のようなリストになりました。

[<Element html at 0x7ff740b24b90>,
 <Element head at 0x7ff740b24d88>,
 <Element title at 0x7ff740b24dd0>,
 <Element body at 0x7ff740b24e18>,
 <Element h1 at 0x7ff740b24e60>]
1
tegan