我需要一些帮助,从外部网页获取内容。
我需要获得div
,然后从其中删除另一个div
。这是我的代码,有人可以帮助我吗?
这是我的XML代码的相关部分:
<html>
...
<body class="domain-4 page-product-detail" > ...
<div id="informacio" class="htab-fragment"> <!-- must select this -->
<h2 class="description-heading htab-name">Utazás leírása</h2>
<div class="htab-mobile tab-content">
<p class="tab-annot">* Hivatalos ismertető</p>
<div id="trip-detail-question"> <!-- must delete this -->
<form> ...</form>
</div>
<h3>USP</h3><p>Nagy, jól szervezett és családbarát ...</p>
<div class="message warning-message">
<p>Az árak már minden aktuális kedvezményt tartalmaznak!</p>
<span class="ico"></span>
</div>
</div>
</div>
...
</body>
</html>
我需要使用div
获取id="informacio"
,之后我需要删除 div
id="trip-detail-question"
,包括表单它包含。
这是我的代码,但它无法正常工作:(。
function get_content($url){
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->strictErrorChecking = false;
$doc->recover = true;
$doc->loadHTMLFile($url);
$xpath = new DOMXPath($doc);
$query = "//div[@id='informacio']";
$entries = $xpath->query($query)->item(0);
foreach($xpath->query("div[@id='trip-detail-question']", $entries) as $node)
$node->parentNode->removeChild($node);
$var = $doc->saveXML($entries);
return $var;
}
答案 0 :(得分:2)
您的第二个 XPath表达式不正确。它会尝试在您之前选择的div
的子节点的上下文中选择div
。您正试图选择:
//div[@id='informacio']/div[@id='trip-detail-question']
并且该节点不存在。你想要这个节点:
//div[@id='informacio']/div/div[@id='trip-detail-question']
你也可以这样选择(允许任何元素,而不仅仅是div
):
//div[@id='informacio']/*/div[@id='trip-detail-question']
或(允许多个嵌套级别)
//div[@id='informacio']//div[@id='trip-detail-question']
在第一个div
的上下文中,正确的XPath表达式为:
.//div[@id='trip-detail-question']
如果您在代码中更改它,它应该有效:
foreach($xpath->query(".//div[@id='trip-detail-question']", $entries) as $node)
$node->parentNode->removeChild($node);