2

ページ上の要素を「ブックマーク」する方法を見つけようとしたので、後で確認できるようになります。これまでに試したことはすべて問題につながるので、絶対パスを見つけることが唯一の方法である可能性があるという結論に達しました。

私は一般的にxpathまたはDOMdocumentに慣れていないので、名前が間違っている可能性がありますが、絶対パスとは次のような意味です。

"/html/body/div[1]/div[1]/div[2]/span[2]"

私が使用するとしましょう:

$element_with_something = $xpath->query('(//*[text()= "something"])');

これは私に要素を与えました。今私の質問は、それが絶対的な道を見つける簡単な方法があるということです。そうでない場合。その後、私はおそらく木の上に自分の道を再帰する必要があります。

もしそうなら、要素に親があるかどうかをどのように確認できますか?

私はhasChildNodes()子供を見つけるために使用できることを知っていますが、親がいるかどうかを調べる方法はありますか?または、それが木の上に当たった再帰を破る他の方法はありますか?

4

1 に答える 1

2

あなたが探しているかもしれませんDOMNode::getNodePath()。簡単な例:

$xml = <<<XML
<blaah1 name="whatever">
    <gender name="male">

        <example1 baseurl="male/86644/">
            <x u="lol.png"/>
            <x u="haha.png"/>
            <x u="name.png"/>
        </example1>

        <example2 baseurl="male/27827/">
            <x u="page.png"/>
            <x u="examp.png"/>
            <x u="bottom.png"/>
        </example2>
    </gender>
</blaah1>
XML;

$doc = new DOMDocument();
$doc->loadXML($xml);
$xp = new DOMXPath($doc);
foreach($xp->query('//node()') as $node ) {

    echo $node->getNodePath(), "\n";

}

そしてそれは出力です:

/blaah1
/blaah1/text()[1]
/blaah1/gender
/blaah1/gender/text()[1]
/blaah1/gender/example1
/blaah1/gender/example1/text()[1]
/blaah1/gender/example1/x[1]
/blaah1/gender/example1/text()[2]
/blaah1/gender/example1/x[2]
/blaah1/gender/example1/text()[3]
/blaah1/gender/example1/x[3]
/blaah1/gender/example1/text()[4]
/blaah1/gender/text()[2]
/blaah1/gender/example2
/blaah1/gender/example2/text()[1]
/blaah1/gender/example2/x[1]
/blaah1/gender/example2/text()[2]
/blaah1/gender/example2/x[2]
/blaah1/gender/example2/text()[3]
/blaah1/gender/example2/x[3]
/blaah1/gender/example2/text()[4]
/blaah1/gender/text()[3]
/blaah1/text()[2]
于 2012-12-23T21:39:25.577 に答える