我有一个包含大量条目的大文件,它们有一个共同点,第一行。
我想从第一行的段落中提取所有文本:
文件类型:合同通知
我正在处理的HTML
代码在这里:
<!-- other HTML -->
<p>
<b>Type of document:</b>
" Contract Notice" <br>
<b>Country</b> <br>
... rest of text ...
</p>
<!-- other HTML -->
我已将HTML
放入DOM
这样:
$dom = new DOMDocument;
$dom->loadHTML($content);
我需要返回段落节点中所有文本,其中第一行是'文档类型:合同通知'
我确信有一种简单的方法可以做到这一点使用DOM
方法或XPath
,请提供建议!
答案 0 :(得分:2)
说到XPath,请尝试以下选择<p>
元素的表达式:
<b>
子元素(第一个)具有值Type of document:
Contract Notice
//p[
b[1][.="Type of document:"]
/following-sibling::text()[1][contains(., "Contract Notice")]
]
答案 1 :(得分:0)
使用此XPath表达式,您可以选择p
元素的所有子项的文本:
//b[text()="Type of document:"]/parent::p/*/text()
答案 2 :(得分:0)
我不喜欢使用DomDocument
解析,除非我需要大量解析文档,但如果你想这样做,那么它可能是这样的:
//Using DomDocument
$doc = new DOMDocument();
$doc->loadHTML($content);
$xpath = new DOMXpath($doc);
$matchedDoms = $xpath->query('//b[text()="Type of document:"]/parent::p//text()');
$data = '';
foreach($matchedDoms as $domMatch) {
$data .= $domMatch->data . ' ';
}
var_dump($data);
我更喜欢一个简单的正则表达式行,毕竟它只是你要找的文件的一部分:
//Using a Regular Expression
preg_match('/<p>.*<b>Type of document:<\/b>.*Contract Notice(?<data>.*)<\/p>/si', $content, $matches);
var_dump($matches['data']); //If you want everything in there
var_dump(strip_tags($matches['data'])); //If you just want the text