Php 如何获取跨节点之间的所有文本节点值
我有以下html结构Php 如何获取跨节点之间的所有文本节点值,php,dom,xpath,Php,Dom,Xpath,我有以下html结构 <span class="x">a</span> <br> • first <br> • Second <br> • second <br> • third <br> <br> <span class="x">b</span> a •首先 •第二 •第二 •第三 B 我需要获取跨节点之间出现的所有文本值(逗号分隔),即第一个、第二个、第二个
<span class="x">a</span>
<br>
• first
<br>
• Second
<br>
• second
<br>
• third
<br>
<br>
<span class="x">b</span>
a
•首先
•第二
•第二
•第三
B
我需要获取跨节点之间出现的所有文本值(逗号分隔),即第一个、第二个、第二个、第三个
如何使用xpath、dom实现这一点无需更改页面布局,您的
html结构和要点就可以轻松地转换为无序列表
然后,您可以选择所有列表项的文本,并用逗号分隔它们。我举了一个例子
要获取此文本,可以使用以下命令:
var nodes = $('ul > li').map(function() {
return $(this).text();
}).toArray().join(",");
其中,
节点
是字符串'first,Second,Second,third'
您的
的html结构后跟项目符号,无需更改页面布局即可轻松转换为无序列表
然后,您可以选择所有列表项的文本,并用逗号分隔它们。我举了一个例子
要获取此文本,可以使用以下命令:
var nodes = $('ul > li').map(function() {
return $(this).text();
}).toArray().join(",");
其中
节点
是字符串'first,Second,Second,third'
您可以使用XPath查询这些元素,但需要在PHP中对这些要点进行“清理”,因为SimpleXML只支持XPath 1.0而不支持扩展的字符串编辑功能
最重要的是XPath表达式,我将详细解释:
:获取span之后包含内容“a”的所有文本节点//span[text()='a']/following::text()
将它们中的每一个与内容为“b”的span之前的文本节点集进行比较[.=//span[text()='b']/previous::text()]
<?php
$html = '
<span class="x">a</span>
<br>
• first
<br>
• Second
<br>
• second
<br>
• third
<br>
<br>
<span class="x">b</span></wrap>
';
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->strictErrorChecking = false;
$dom->recover = true;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$results = $xpath->query("//span[text()='a']/following::text()[. = //span[text()='b']/preceding::text()]");
foreach ($results as $result) {
$token = trim(str_replace('•', '', $result->nodeValue));
if ($token) $tokens[] = $token;
}
echo implode(',', $tokens);
?>
您可以使用XPath查询这些元素,但需要在PHP中对这些要点进行“清理”,因为SimpleXML只支持XPath 1.0,没有扩展的字符串编辑功能
最重要的是XPath表达式,我将详细解释:
//span[text()='a']/following::text()
:获取span之后包含内容“a”的所有文本节点
[.=//span[text()='b']/previous::text()]
将它们中的每一个与内容为“b”的span之前的文本节点集进行比较
这是完整的代码,您可能需要投入更多的精力来删除要点。确保PHP将其评估为UTF-8,否则您将得到的不是要点
<?php
$html = '
<span class="x">a</span>
<br>
• first
<br>
• Second
<br>
• second
<br>
• third
<br>
<br>
<span class="x">b</span></wrap>
';
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->strictErrorChecking = false;
$dom->recover = true;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$results = $xpath->query("//span[text()='a']/following::text()[. = //span[text()='b']/preceding::text()]");
foreach ($results as $result) {
$token = trim(str_replace('•', '', $result->nodeValue));
if ($token) $tokens[] = $token;
}
echo implode(',', $tokens);
?>
检查此问题:,只需使用“span”而不是checkboxPHP中的解决方案会更好:)您的意思是您正在用php获取此内容,并希望检索php文件中的文本以及这些
标记?检查此问题:,您只需要使用“span”而不是checkboxPHP中的解决方案会更好:)您的意思是您正在用php获取此内容,并希望检索php文件中的文本以及那些
标记?