php - 从外部页面获取div,然后从中删除另一个div

标签 php xml xpath domdocument domxpath

我需要一些帮助,从外部网页获取内容。

我需要获取一个 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/

相关文章:

c# - 如何找到 XML 文件中属性值的最大值?

php - HTML 电子邮件中的动态图像(例如实时倒计时时钟)

php - 如何从后端使用 Square API 获取卡片的 Nonce

java - 使用 StAx 解析 XML 文件时出错

java - Java 的条件 xpath

sql - 基于子元素值使用 PLSQL 提取 XML

php - CSS 按钮未设置 $_POST

php - 在 codeigniter 中提交表单失败后无法保留表单中的值

android - 如何重用这个 Android 按钮?

Android Tab内容与选项卡重叠