【发布时间】:2020-01-24 03:32:17
【问题描述】:
我有一个标记 HTML 如下:
<body>
<div>......</div>
............
<div class="entry-content">
<div class="code1 code2">(ads.....);</div>
<p><img src="https://www..."></img></p>
<h2> title </h2>
<div class="code1-block code2">(ads.....);</div>
<div class="data1 dta-ta1">
<ul><li><p> text</p></li>
<li><span> text2 </span></li>
<li><span> text3 </span></li>
<div class="codex1 code-block"><span>(ads ....); </span></div>
<li><span> text4 </span></li>
<div class="codex1 code-block"><span>(ads ....); </span></div>
</ul>
</div>
<div class="codex2-block code2">(ads.....);</div>
<div class="data2-entry dta-ta2">
<p>
<span> text5</span>
</p>
<p> text6 </p>
<p> text7 </p
<div class="codex1 code-block"><span>(ads ....); </span></div>
<li><span> text8 </span></li>
<div class="codex1 code-block"><span>(ads ....); </span></div>
</div>
</div>
</body>
我尝试“使用class="entry-content" 进入div,从其子节点中获取所有文本,不包括class= "code1", "code2", "codex1", "codex2" 的子节点
我的代码如下所示只是转到 div 并从子节点获取所有文本。但是,我无法使用 code1 和 code2 从子节点中删除文本。感谢您的支持。谢谢。
$classname='entry-content';
$a = new DOMXPath($dom);
$query = "//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]";
$list = $a->query($query);
if ($list->length > 0) {
foreach ($list as $element) {
$nodes = $element->childNodes;
foreach ($element as $node) {
$bodytext = trim(preg_replace('/[\r\n]+/', ' ', $node->nodeValue));
$bodyContent .= '<p>' . $bodytext . '</p>';
}
}
}
我的预期输出:
https://www...
标题
文本2
文本3
文本4
文本5
文本6
文本7
文本8
【问题讨论】:
-
你的预期输出是什么?
-
我想从 class="content" 的子节点 insde div 中获取所有文本,并排除包含“code”类的子节点 EX:code1 code2, codex1, codex2 .... 有点复杂的 HTML 标记带来的挑战。我认为我们需要一个复杂的查询 xpath。
-
请edit您的问题与预期的输出您提供的示例输入
-
好的!我刚刚编辑过。