我试图解决this问题,但当需要使用XPath检测HTML的末尾时,我陷入了困境。
HTML是:
<h2>Title 1</h2>
<br>
<br>
<div class="active"></div>
<h2>Title 2</h2>
<br>
<br>
<div class="active"></div>
<div></div>
<div></div>
<div class="active"></div>
<h2>Title 3</h2>
<br>
<br>
<div></div>
<div></div>
<h2>Title 4</h2>
<br>
<br>
<div></div>
<div class="active"></div>
<div></div>当时我的XPath是
//h2[following-sibling::div[@class='active'][(preceding-sibling::h2 and following-sibling::h2)]]但是它没有检测到“标题4”,因为最后的“div”没有“以下兄弟姐妹::h2”。只有使用XPath无法检测到的文档结束。
当'div‘介于'h2’和‘end’之间时,我需要处理这个问题。
玩‘前面的兄弟姐妹::h2place()= did ()’没有帮助。
是否有一种使用XPath定义文档结束的方法?
发布于 2013-12-21 15:54:25
如果我的理解是正确的,因为您试图在您的h2示例中找到一个XPath,那么您正在寻找的是没有后面跟着另一个h2的h2。考虑到你给我们的东西,这就行了:
//h2[not(following-sibling::h2)]XPath中的“文档结束”
XPath文档的结尾是什么?XPath将文档视为节点树。这棵树上的“文件的结尾”在哪里?这取决于应用程序。假设我有这样一份文件:
<foo>
<p>This is a paragraph</p>
<p>A second one</p>
</foo>在我的申请中,我想在“文件的末尾”添加所有段落内容的一些杂凑。在这种情况下,我的意思是“在最后一个结束标签之后”。所以我会得到这样的结果,最后一行是散列:
<foo>
<p>This is a paragraph</p>
<p>A second one</p>
</foo>
1010DEADBEEF1010现在,生成的文档将不符合XML或HTML,但这在我的应用程序中很好。对于XPath,没有办法说“在最后一个结束标记之后”。我能做的就是告诉XPath获取根节点,然后让其他东西序列化这个节点(这是输出开始和结束标记的过程),然后让它在后面添加散列。(XPath也可用于选择所有段落以构建哈希)。
不同的场景。我有一个像上面这样的文档,但是这一次我想在“文档的末尾”添加一个版权信息。我希望结果是格式良好的XML。这一次,当我说“文档的结尾”时,我的意思是在“顶层元素的最后一个子元素”之后,所以最后的结果是:
<foo>
<p>This is a paragraph</p>
<p>A second one</p>
<p>Copyright 2013 Widgets Incorporated</p>
</foo>这一次,我可以使用XPath来选择根元素的最后一个子元素,然后使用其他方法修改文档,以便在最后一个子元素之后添加一个段落。(XSLT将是我所使用的工具的最佳例子,因为XSLT使用XPath来匹配节点。)
我希望我已经证明了"end of document“是一个特定于应用程序的术语,在XPath使用的数据模型中没有唯一的等价项。
发布于 2013-12-21 17:59:08
XPath在树中查找节点。'end of document‘不是由树中的一个节点表示的,因此没有什么可查找的。
https://stackoverflow.com/questions/20720382
复制相似问题