【发布时间】:2014-10-16 12:23:25
【问题描述】:
我们需要读取 HTML cmets 之间的节点:
<html>
<!-- comment 1 -->
<div>some text</div>
<div><p>Some more elements</p></div>
<!-- end content -->
<!-- comment 2 -->
<div>some text</div>
<div><p>Some more elements</p>
<!-- end content -->
</div>
</html>
我尝试使用以下 XPath:
//*[preceding-sibling::comment()[contains(., 'comment 1')]][following-sibling::comment()[contains(., 'end content')]]
它适用于第一条评论,即评论 1,但不适用于第二条评论 以下是相同的 XPath
//*[preceding-sibling::comment()[contains(., 'comment 2')]][following-sibling::comment()[contains(., 'end content')]]
我正在使用带有以下代码的 HTML 敏捷包:
var nodes = document.SelectNodes("//*[preceding-sibling::comment()[contains(., 'comment 1')]][following-sibling::comment()[contains(., 'InstanceEndEditable')]]");
string allHtml = nodes[0].OuterHtml;
如果我在上面的代码中将“comment 1”更改为“comment 2”,那么它不会给出任何结果。
【问题讨论】:
-
请注意,您的 HTML Agility Pack 示例代码中的 XPath 包含您可能打算编辑掉的额外约束 (
[contains(., 'InstanceEndEditable')]]) -- 它与您的示例不匹配。 -
我回滚了您对源代码的更改,因为当您以这种方式重新排列源代码时,它完全改变了原始问题。在这里完成后,请随意提出一个新问题。谢谢。
标签: html xpath html-agility-pack