私はXPathを理解しているので、XML文書の要素をナビゲートする方法です。
方向はXPath - >要素です。
どうやって逆に進むのですか?つまり、既知の要素値からXPathを計算しますか?Webページの既知の値からXPathを計算する方法はありますか?
たとえば、stackoverflowヘッダーの "faq"リンクのxpathはどのように見えますか?
言語はそれほど重要ではありません。XPathの計算に役立つアルゴリズムやライブラリ/テクニックにもっと興味があります。
私はXPathを理解しているので、XML文書の要素をナビゲートする方法です。
方向はXPath - >要素です。
どうやって逆に進むのですか?つまり、既知の要素値からXPathを計算しますか?Webページの既知の値からXPathを計算する方法はありますか?
たとえば、stackoverflowヘッダーの "faq"リンクのxpathはどのように見えますか?
言語はそれほど重要ではありません。XPathの計算に役立つアルゴリズムやライブラリ/テクニックにもっと興味があります。
モジュールのソースコードに必要なものを見つけることがここでそれを行うには、単純なJS機能です。 previousSibling、nodeType、およびparentNodeのみを使用するため、他の言語との移植が可能です。しかし、その結果は人間にとっては判読不可能であり、ページの変化にもかかわらず特に頑強ではありません。
私の経験上、XPathは手作業で書かれた方が便利です。しかし、よりきれいな(おそらく遅い場合)結果を生成するアルゴリズムを作ることは間違いありません。
function getXPath(node)
{
if(node == document)
return "/";
var xpath = "";
while (node != null && node.nodeType != Node.DOCUMENT_NODE)
{
print(node.nodeType);
var pos = 1, prev;
while ((prev = node.previousSibling) != null)
{
node = prev
pos++;
}
xpath = "/node()[" + pos + "]" + xpath;
node = node.parentNode;
}
return xpath;
}
XPathはn番目の子要素(つまり/ parentelement/child_element [2])を選択できるので、ツリーのどこに要素があるのか分かる場合は、XPathを生成する必要があります。
この質問に答えるのが難しい言語を指定していません。 Pythonのlxmlのモジュールは、あなたのpythonを使用していない場合でも、それを
>>> a = etree.Element("a")
>>> b = etree.SubElement(a, "b")
>>> c = etree.SubElement(a, "c")
>>> d1 = etree.SubElement(c, "d")
>>> d2 = etree.SubElement(c, "d")
>>> tree = etree.ElementTree(c)
>>> print(tree.getpath(d2))
/c/d[2]
>>> tree.xpath(tree.getpath(d2)) == [d2]
True
を行うことができ、あなたが