【发布时间】:2012-01-13 04:48:26
【问题描述】:
我最近在解析 HTML 文档中的所有文本节点时收到了帮助。结果代码是这样的:
$doc = new DOMDocument();
$doc->loadHTML($contents);
$doc->loadHTML("<p>not in the brackets..</p>");
$xpath = new DOMXPath($doc);
$textnodes = $xpath->evaluate('//text()');
使用以下摘录:
<p>This is a <b>nested <i>HTML</i> tag<b>...</p>
我可以创建一个元素数组:
Array
(
[0] => This is a
[1] => nested
[2] => HTML
[3] => tag
[4] => ...
)
不过,我实际上想做的是检索所有文本节点但允许“查看”某些 HTML 标记。例如,我不希望 <i>、<b> 和 <u> 标签被解析为单个节点;我宁愿他们加入到前一个文本节点上。理想情况下,上述数组应如下所示:
Array
(
[0] => This is a nested HTML tag...
)
另一方面,<p> 标签应该被识别为单独的节点。所以下面的文字:
<p>paragraph 1 <b>here</b></p> <p>paragraph 2</b>
理想情况下会被解析为:
Array
(
[0] => paragraph 1 <b>here</b>
[1] => paragraph 2
我已经阅读了一些关于 XPath 和 PHP DOM 的文章,但老实说,我真的不知道如何去做。谁能指出我正确的方向?谢谢。
编辑
只是为了澄清输出必须是数组格式;我的目标是解析页面中的所有文本,然后可以在翻译文件中使用它。因此,某些 HTML 标记(<b> 等)在解析后的文本中是可取的,以便在新的翻译文件中保持完整的句子在一起 - 并保持标记大致完整。
【问题讨论】:
-
@Calvin 除非我误解了那篇文章,否则问题与我问的不一样。
-
@pguardiario 再说一次,我不认为这是在问同样的事情吗?如果我可以使用答案来实现我的目标,我不知道如何。请进一步告知。
标签: php html parsing dom nodes