が見つかったxpathをリストする次のコードがあります$value
。
特定のURL(写真を参照)に対してtd1
、終了タグがない非標準タグが検出されました。下のスクリーンショットにあるように、おそらくサイト開発者はそれを意図的にそこに置いています。
この要素は、ノードのコアクトXPathを識別する際に問題を引き起こします。
壊れたXpathの例:
/html/body/div[2]/div[2]/table/tr[2]/td/table/tr[1]/td[2]/table/tr[2]/td[2]/table[3]/tr[2]/**td1**/td[2]/span/u[1]
(ご覧のとおり、td1はXpathで識別され、チェーンされています)
この要素を削除することで、目的の有効なXPathを構築するのに役立つと思います。
有効な例は
/html/body/div[2]/div[2]/table/tr[2]/td/table/tr[1]/td[2]/table/tr[2]/td[2]/table[3]/tr[2]/td[2]/span/u[1]
DOMXpathの以前のロードを削除するにはどうすればよいですか?他にアプローチはありますか?
td1以外の可能性があるすべての無効なタグ(h8、diwなど)を削除したいと思います...
private function extract($url, $value) {
$dom = new DOMDocument();
$file = 'content.txt';
//$current = file_get_contents($url);
$current = CurlTool::downloadFile($url, $file);
//file_put_contents($file, $current);
@$dom->loadHTMLFile($current);
//use DOMXpath to navigate the html with the DOM
$dom_xpath = new DOMXpath($dom);
$elements = $dom_xpath->query("//*[text()[contains(., '" . $value . "')]]");
var_dump($elements);
if (!is_null($elements)) {
foreach ($elements as $element) {
var_dump($element);
echo "\n1.[" . $element->nodeName . "]\n";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
if( ($node->nodeValue != null) && ($node->nodeValue === $value) ) {
echo '2.' . $node->nodeValue . "\n";
$xpath = preg_replace("/\/text\(\)/", "", $node->getNodePath());
echo '3.' . $xpath . "\n";
}
}
}
}
}