问题标签 [xpath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1349 浏览

xslt - 使用 XSLT 的元数据驱动生成

我经常通过转换遗留系统的专有数据模型来创建 XSD 模式。这效果很好。但是,遗留系统只允许我指定参数的非常基本的属性,例如数据类型(intstring)。

我想通过一种允许我添加元数据的机制来增强 XSL 转换,以便为转换提供更多详细信息。我想到了类似 Java 属性表示法来将属性分配给 XPath。

想象以下示例:

遗留系统数据模型(实际上很简洁,但最适合演示目的)

元数据

生成的 XSD 架构

你对那个怎么想的?有没有办法将元数据包含到 XSL 样式表中?

0 投票
2 回答
6647 浏览

c++ - MSXML 选择节点不工作

我正在开发一个自动化测试应用程序,目前正在编写一个函数来比较两个应该相同但可能不相同的 XML 文件之间的值。这是我正在尝试处理的 XML 示例:

(注意可能有多个<subreport>元素,并且在这些元素中,有多个<record>元素。)

我想要的是提取<value>两个文档的标签,然后比较它们的值。那部分我知道该怎么做。问题在于提取本身。

由于我被困在 C++ 中,所以我使用 MSXML,并编写了一个包装器以允许我的应用程序抽象出实际的 XML 操作,以防我决定更改我的数据格式。

该包装器 CSimpleXMLParser 加载 XML 文档并将其“顶级记录”设置为 XML 文档的文档元素。(CRecord 是一个抽象类,CXMLRecord 是其子类之一,它可以单独或按组访问子记录,还允许访问记录的“值”(在 CXMLRecord 的情况下,子元素或属性的值) .) CXMLRecord 包含一个 MSXML::MSXMLDOMNodePtr 和一个指向 CSimpleXMLParser 实例的指针。) 包装器还包含用于返回子项的实用函数,CXMLRecord 使用这些函数返回其子记录。

在我的代码中,我执行以下操作(尝试返回所有<subreport>节点以查看它是否有效):

这总是返回错误。CXMLRecord::GetChildRecords() 的实现内容基本上是

CSimpleXMLParser::SelectNodes() 是:

运行时,肯定会正确地将最高记录设置为<report>元素。我可以用它做各种各样的事情,比如获取它的子节点(通过 MSXML 接口,而不是通过我的包装器)或其名称等。我知道我的包装器可以工作,因为我在应用程序的其他地方使用它进行解析一个 XML 配置文件,并且可以完美运行。

我想也许我对 XPath 查询表达式做了一些错误的事情,但我能想到的每一种排列都不会让人高兴。当我尝试处理这个 XML 文件时,MSXML::IXMLDOMNodeListPtr返回的总是长度为 0。IXMLDOMNodePtr::SelectNodes()

这真让我抓狂。

0 投票
7 回答
53716 浏览

python - 通过 XPath 解析 HTML

在 .Net 中,我发现了这个很棒的库HtmlAgilityPack,它允许您使用 XPath 轻松解析格式不正确的 HTML。我已经在我的 .Net 站点中使用了几年,但我不得不为我的 Python、Ruby 和其他项目适应更痛苦的库。有人知道其他语言的类似库吗?

0 投票
3 回答
2752 浏览

delphi - Delphi 和 XPath 函数

我可以在 Delphi 的函数 selectNodes() 中使用 Xpath 节点集函数 position() 从节点列表中只选择一定数量的元素吗?如果我这样做:

一切都很好,我得到了索引为 1 的元素,但是当我尝试时

当我尝试时,我得到异常“未知方法”

我得到“意外的令牌<”。我使用的是 delphi7,我还使用更新版本的 msxml 将新类型库导入到我的项目中。

0 投票
3 回答
8135 浏览

python - 为什么在使用 lxml(在 python 中)处理 XHTML 文档时 xpath 不起作用?

我正在针对以下测试文档进行测试:

如果我使用 lxml.html 解析文档,我可以使用 xpath 获得 IMG:

但是,如果我将文档解析为 XML 并尝试获取 IMG 标记,则会得到一个空结果:

我可以直接导航到元素:

但这当然不能帮助我处理任意文件。我还希望能够查询 etree 以获得一个 xpath 表达式,该表达式将直接识别此元素,从技术上讲,我可以这样做:

但是,xpath 显然对于解析任意文档没有用处。

显然我在这里遗漏了一些关键问题,但我不知道它是什么。我最好的猜测是它与命名空间有关,但唯一定义的命名空间是默认命名空间,我不知道关于命名空间我还需要考虑什么。

那么,我错过了什么?

0 投票
7 回答
440 浏览

xslt - 如何从文档中删除

0 投票
2 回答
8464 浏览

xml - 如何使用 XPath 在 XML 文档中选择多组属性?

我在构造单个 XPath 语句以返回两组不同的属性时遇到问题。

例如下面的 XML 文档:

如果我使用以下 XPath 语句:

它产生以下属性集:

我使用什么语句来产生以下属性集:

0 投票
3 回答
10729 浏览

java - JAVA:使用 XPath 表达式构建 XML 文档

我知道这并不是 XPath 的真正用途,但如果我有一个 XPath 表达式的 HashMap 来表示值,我将如何构建 XML 文档。我发现 dom-4j 的 DocumentHelper.makeElement(branch, xpath) 除了它不能创建属性或索引。肯定存在可以做到这一点的图书馆吗?

会导致:

0 投票
4 回答
6384 浏览

c# - 在 .NET 中验证 XPath

如何验证给定的 xpath 字符串在 C#/.NET 中是否有效?

我不确定只运行 XPath 并捕获异常是一个有效的解决方案(暂时搁置我喉咙里的胆汁)——如果明天我遇到一些我没有测试过的其他输入怎么办?

0 投票
4 回答
4071 浏览

xml - XQuery(或 XPath)是否具有更新、插入和删除以及选择的等价物?

我知道如何使用 XPath 从 XML 中找到我需要的东西。语法需要一点时间来适应,但它非常强大。我也对学习 XQuery 很感兴趣,但是类似 SQL 的语法似乎很尴尬。即便如此,如果它不仅可以提供 select 等效项,还可以像 SQL 那样提供更新、插入和删除,我会原谅所有的尴尬。

那么,XQuery 是否具有 Update、Insert、Delete 和 Select 的等价物?

XPath 是否有我忽略的这些等价物?