我需要一些帮助,从外部网页获取内容。
我需要获取一个 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>
我需要使用 id="informacio"
获取 div
,然后我需要删除 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;
}
最佳答案
您的第二个 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);
关于php - 从外部页面获取div,然后从中删除另一个div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24092132/