【问题标题】:How exclude html comments from text node xpath?如何从文本节点 xpath 中排除 html 注释?
【发布时间】:2019-04-03 01:34:19
【问题描述】:

我有以下html结构:

<a>
    <div>
        <div>
            <span>
                text node 1<br>
                text node 2  <!--//comments-->
            </span>
        </div> 
    </div>
</a>

通过以下查询,我得到了第二个节点,但是如何获取不包括 cmets 的那个节点?

$spanx = $xpath->query('//a/div/div/span/text()[2]');
$span = $spanx->item($l)->nodeValue;
echo "<td>".$span."</td></tr>";

我有这个结果:

text node 2 //comments

我搜索:

text node 2

【问题讨论】:

  • $x("//span/text()[2]")[0].nodeValue.trim() 仅获取 text node 2。
  • @supputuri php 中的 sintax 怎么样?
  • @Emma filter result with regex是我最后的选择,但xpath有comment()来获取cmets,所以我尝试解决方案来拒绝或排除评论......但感谢提示......跨度>
  • 如果您使用text() 节点测试,您不应该得到评论节点,除非您没有向我们展示其他一些相关的代码。
  • @Alejandro 也许你是对的,因为我测试了答案解决方案并且 cmets 已经到来,所以请检查我的代码并将其他部分发布到 cmets。 TKS。

标签: php html xpath


【解决方案1】:

我已经在我的本地主机上测试了以下内容。我创建了名为 DOM_with_comment.html 的文件,其中包含:

<a>
    <div>
        <div>
            <span>
                text node 1<br>
                text node 2  <!--//comments-->
            </span>
        </div> 
    </div>
</a>

当我跑步时:

<?php
$doc = new DOMDocument;
libxml_use_internal_errors(true);
$doc->preserveWhiteSpace = false;
$doc->loadHTMLFile('DOM_with_comment.html');
$xpath = new DOMXPath($doc);
echo "<pre>";
foreach ($xpath->query('//a/div/div/span/text()') as $item) {
    var_dump($item->nodeValue);
}

输出是:

string(29) "
                text node 1"
string(31) "
                text node 2  "
string(14) "
            "

因此,通过从您的 xpath 查询中访问第一个合格结果 [0],然后显示 trim()ed -&gt;nodeValue() 和 var_export(),可以发现目标子字符串的任一侧都没有 cmets 或空格。

var_export(trim($xpath->query('//a/div/div/span/text()[2]')[0]->nodeValue));
// outputs: 'text node 2'

附言如果您的输入不是来自文件,而是来自变量,则其工作方式相同:

$html = <<<HTML
<a>
    <div>
        <div>
            <span>
                text node 1<br>
                text node 2  <!--//comments-->
            </span>
        </div> 
    </div>
</a>
HTML;
$doc->loadHTML($html);

【讨论】:

  • @Magic 我们可以考虑解决这个问题吗?如果没有,请告诉我出了什么问题。
猜你喜欢
  • 1970-01-01
  • 2012-05-02
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
相关资源
最近更新 更多