首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XPath中文档的结尾

XPath中文档的结尾
EN

Stack Overflow用户
提问于 2013-12-21 15:13:39
回答 2查看 322关注 0票数 0

我试图解决this问题,但当需要使用XPath检测HTML的末尾时,我陷入了困境。

HTML是:

代码语言:javascript
复制
    <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是

代码语言:javascript
复制
//h2[following-sibling::div[@class='active'][(preceding-sibling::h2 and following-sibling::h2)]]

但是它没有检测到“标题4”,因为最后的“div”没有“以下兄弟姐妹::h2”。只有使用XPath无法检测到的文档结束。

当'div‘介于'h2’和‘end’之间时,我需要处理这个问题。

玩‘前面的兄弟姐妹::h2place()= did ()’没有帮助。

是否有一种使用XPath定义文档结束的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-21 15:54:25

如果我的理解是正确的,因为您试图在您的h2示例中找到一个XPath,那么您正在寻找的是没有后面跟着另一个h2h2。考虑到你给我们的东西,这就行了:

代码语言:javascript
复制
//h2[not(following-sibling::h2)]

XPath中的“文档结束”

XPath文档的结尾是什么?XPath将文档视为节点树。这棵树上的“文件的结尾”在哪里?这取决于应用程序。假设我有这样一份文件:

代码语言:javascript
复制
<foo>
  <p>This is a paragraph</p>
  <p>A second one</p>
</foo>

在我的申请中,我想在“文件的末尾”添加所有段落内容的一些杂凑。在这种情况下,我的意思是“在最后一个结束标签之后”。所以我会得到这样的结果,最后一行是散列:

代码语言:javascript
复制
<foo>
  <p>This is a paragraph</p>
  <p>A second one</p>
</foo>
1010DEADBEEF1010

现在,生成的文档将不符合XML或HTML,但这在我的应用程序中很好。对于XPath,没有办法说“在最后一个结束标记之后”。我能做的就是告诉XPath获取根节点,然后让其他东西序列化这个节点(这是输出开始和结束标记的过程),然后让它在后面添加散列。(XPath也可用于选择所有段落以构建哈希)。

不同的场景。我有一个像上面这样的文档,但是这一次我想在“文档的末尾”添加一个版权信息。我希望结果是格式良好的XML。这一次,当我说“文档的结尾”时,我的意思是在“顶层元素的最后一个子元素”之后,所以最后的结果是:

代码语言:javascript
复制
<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使用的数据模型中没有唯一的等价项。

票数 2
EN

Stack Overflow用户

发布于 2013-12-21 17:59:08

XPath在树中查找节点。'end of document‘不是由树中的一个节点表示的,因此没有什么可查找的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20720382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档