【问题标题】:xpath extract complete htmlxpath 提取完整的html
【发布时间】:2013-10-10 20:59:35
【问题描述】:

我正在尝试使用 XPath 提取包含 HTML 标记的完整表格,我可以将其存储在变量中,进行一些字符串替换,然后直接回显到屏幕上。我发现了很多关于将文本从表格中取出的帖子,但我想保留 HTML 格式,因为我只是要显示它(经过轻微修改)。

目前我正在使用字符串函数 stristr、substr 等提取表格,但我更喜欢使用 XPath。

我可以使用以下内容显示表格的内容,但它只显示没有格式的表格 TD 字段。它也不会将其存储在我可以操作的变量中。

$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$arr = $xpath->query('//table');
foreach($arr as $el) {
   echo $el->textContent;

我试过了,但没有输出:

$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$arr = $xpath->query('//table');
echo $arr->saveHTML();

【问题讨论】:

  • textContent 属性(php.net/manual/en/class.domnode.php#domnode.props.textcontent)只返回<table> 元素及其后代的文本内容;即没有 HTML 开始/结束标签或 HTML 属性。我不知道 DOMNode 或其同类是否提供了一种方法来提取节点的“outerHTML”(包括标记的序列化)。
  • 我想我可能需要使用 saveHTML。只是想弄清楚它是如何工作的。
  • 我认为 saveHTML 将自己的 等包裹在数据周围。我只是使用 xpath 来删除所有这些!
  • 我是新手。请善待。我看过其他答案,但不太确定如何使用它。我上面的回声会变成: echo $domDocument->saveHtml($el);

标签: php html xpath


【解决方案1】:

使用DOMNode::C14N():

foreach($arr as $el) {
   echo $el->C14N();

【讨论】:

  • 那种工作谢谢,只有输出在很多地方都有大写字母A,顶部有波浪线:
  • 这似乎是一些编码问题。您可能需要使用正确的编码加载文件或在之后对其进行转换。输入中应该出现的字符是什么?顺便说一句,这是一个抑扬符,而不是波浪号。但这并没有改变任何问题。
  • @OP:是什么让您认为这不是编码问题?由于 UTF-8 被解释为 ISO8859-1,nbsp 以 Â 出现是一个已知问题:例如osdir.com/ml/text.xml.xalan.java.user/2004-04/msg00037.html 我认为 Jens 已经成功回答了你的问题……编码问题是另一回事。
  • @LarsH 有趣,还不知道。甚至还有一个bunch of on-site resources on that problem
  • 感谢您的帮助。在传递给 xpath 之前,我只是发布了以下内容,现在它工作正常: $result = str_replace(' ', " ", $result);
猜你喜欢
  • 1970-01-01
  • 2015-11-22
  • 2012-12-19
  • 1970-01-01
  • 2011-07-31
  • 2019-04-05
  • 2019-06-17
  • 2020-03-05
  • 1970-01-01
相关资源
最近更新 更多