当前位置: 首页 > 知识库问答 >
问题:

XPath中的文档结尾

林和畅
2023-03-14

我正试图解决这个问题,当需要使用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)]]

但它无法检测到“title 4”,因为最后一个“div”没有“follows-sibling::h2”。只有文档的结尾是我无法使用XPath检测到的。

我需要处理'div'在'h2'和结尾之间的情况。

使用“preperate-sibling::h2[position()=last()]”没有帮助。

有没有一种方法可以使用XPath定义文档的结尾?

共有1个答案

鲍理
2023-03-14

如果我没有理解错的话,由于您试图在XPath示例中查找h2,所以您要查找的是后面没有另一个h2h2。考虑到你给我们的,这就行了:

//h2[not(following-sibling::h2)]

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 1.0(BizTalk 2016)我正在寻找一种通用的方法来选择任何有效的xml文档的命名空间 例如,我有以下xml文档: 假设根元素的值可以是任何东西,那么选择名称空间值的xpath是什么http://www.random.com/bo/request/portfolioactivation 我原本希望“/*/@xmlns”能起作用,但事实并非如此。

  • 问题内容: 作为Java 6应用程序的一部分,我想在XML文档中找到所有名称空间声明,包括所有重复项。 编辑 :根据马丁的要求,这是我正在使用的Java代码: 假设我有这个XML文档: 为了找到所有名称空间声明,我 使用xPath 1.0 将此xPath语句应用于XML文档: 它找到4个名称空间声明,这是我期望的(和期望的): 但是,如果我 改用xPath 2.0 ,则会得到16个名称空间声明(每

  • 我有一个包含3个表的数据库:品牌(想想麦当劳)->商店->销售 每个店铺都有很多销售,每个品牌都有很多店铺。如果我想查询麦当劳有多少销售额来建立一个报告,我该如何构造我的品牌文档?我是在brands文档中保留一个字段(每当每个商店销售时就会更新该字段),还是在商店文档中保留一个字段,然后循环遍历所有商店,为每个品牌创建一个销售额总和。 第一种方法可能在读操作上表现得更好,而第二种方法在写操作上表现

  • 本文向大家介绍python-xpath获取html文档的部分内容,包括了python-xpath获取html文档的部分内容的使用技巧和注意事项,需要的朋友参考一下 有些时候我在们需要的用正则提取出html中某一个部分的文字内容,如图: 获取dd部分的html文档,我们要通过它的一个属性去确定他的位置才可以拿到他这个部分我们可以看到他的这个属性class='row clearfix ',然后用xpa

  • 主要内容:Java XPath解析器 查询XML文档的示例Java XPath解析器 查询XML文档的示例 需要解析的文件input.xml 编写Java XPath解析器 查询XML文档的程序 输出结果为:

  • 主要内容:Java XPath解析器 解析XML文档的步骤,Java XPath解析器 解析XML文档的示例Java XPath解析器 解析XML文档的步骤 以下是使用 XPath Parser 解析文档时使用的步骤。 导入与 XML 相关的包。 创建一个文档生成器。 从文件或流创建文档。 创建一个 Xpath 对象和一个 XPath 路径表达式。 使用XPath.compile()编译 XPath 表达式,并通过XPath.evaluate()评估编译的表达式来获取节点列表。 迭代节点列表。