我们需要在HTML注释之间读取节点:
<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 Agility Pack:
var nodes = document.SelectNodes("//*[preceding-sibling::comment()[contains(., 'comment 1')]][following-sibling::comment()[contains(., 'InstanceEndEditable')]]");
string allHtml = nodes[0].OuterHtml;
如果我在上面的代码中将“评论1”更改为“评论2”,那么它不会给出任何结果。
答案 0 :(得分:2)
添加一个谓词,表明您希望第一个前面的评论和第一个后面的评论。
因此,例如,要获取以&#34开头的评论之间的内容;评论1&#34;:
//*[preceding-sibling::comment()[1][contains(., 'comment 1')]]
[following-sibling::comment()[1][contains(., 'end content')]]
同样,要获取以&#34开头的评论之间的内容;评论2&#34;:
//*[preceding-sibling::comment()[1][contains(., 'comment 2')]]
[following-sibling::comment()[1][contains(., 'end content')]]