问题标签 [xpath-3.1]

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 投票
1 回答
185 浏览

xpath - 如何将 XSLT 2 样式表模块中定义的函数公开给 fn:transform?

XPath 3.1transform函数允许您应用模板或调用命名模板或调用样式表函数。

但是,当我尝试使用现有的 XSLT 2.0 样式表模块时(例如,在 http://www.xsltfunctions.com/ 上记录的 functx 模块并在http://www.xsltfunctions.com/作为 XSLT 2 提供xsl/functx-1.0-doc-2007-01.xslxsl:stylesheet )在一个或xsl:transform根元素中以 XSLT 2 方式声明许多函数,但不使用 XSLT 3xsl:package构造,我无法说服 Saxon 9.8 或 9.9 运行任何使用transform函数和参数声明的函数,initial-function因为我总是收到错误“ XTDE0041:无法从外部调用函数 foo#2,因为它不是公共的”。

示例可能是:

但给出了上述错误。

我发现的唯一解决方法是动态构建(例如在 XQuery 中)一个 XSLT 3 包,导入 functx 模块并xsl:expose用于公开函数:

这可行,但需要使用 XPath 3.1 的宿主语言(如上面的 XQuery 3.1)。

有没有更简单的方法来使用该transform函数并initial-function使用现有的 XSLT 2 样式表模块声明函数?

0 投票
2 回答
194 浏览

xslt - 如何在 xpath 表达式中实现具有名称的用户定义函数?

我正在使用 XSLT。我知道内联函数表达式,有没有办法在 xpath 表达式中声明一个命名函数?因为我需要函数名来实现递归调用。

0 投票
1 回答
35 浏览

xpath - 这个 xpath 的确切含义

我遇到了这个 XPath 字符串...

courses[?(@.id==101)].students[?(@.id==111)]

我什至不确定它是否是有效的 XPath,因为“?” 和 '。' 被使用。而且它在许多在线 XPath 评估器中不起作用。

虽然,在 XPath 3 中,有一个查找运算符 ('?') 和一些 JSON 扫描功能。参考:https ://www.altova.com/training/xpath3/xpath-31#lookup-operator

所以,我想知道'?()'和'。是。

到目前为止,我猜测这个表达式被用来搜索 XML 中的 JSON 内容。

猜测 JSON 对象是这样的:

简而言之,它是一个有效的 XPath 3 表达式吗?如果是,那么“?()”和“。”到底是什么?正在做?

0 投票
2 回答
58 浏览

xml - 完整且简洁的 XPath 3.1 参考

我一直在阅读XPath 3.1 的 W3 规范,对于大多数人来说阅读时间太长了(他们只会退出)。任何地方都有缩写规范吗?

我们的受众是我们系统的用户,他们需要编写 XPath 语句来提取他们需要的数据。他们不是程序员,他们是业务用户。他们希望在遇到困难时尽快找到满足其特定需求的解决方案。

更新:首先,我完全同意“内在张力”下方的@kjhughes 评论。而且我认为迈克尔提出了一个很好的观点,即快速指南应该是主要用途 - 删除边缘情况。并将注释减少到最低限度(同样没有边缘情况),但对示例是肯定的。

我们多年来一直使用的是本教程,它倾向于在简单性和教授所有基础知识之间取得很好的平衡。而且这个还不错。

但两者都没有讨论 XPath 3.1 或为 JSON 文件设计 XPath。有没有等价的东西。

例如,这是我仍在努力解决的三个基本项目:

  1. 基本查询的语法是什么。使用Southwind.json是否是“/Employees/Employee”来获取所有员工节点的列表(我无法在我的代码中成功加载 JSON 文件,所以我无法测试它)?
  2. 地图是否曾经从 XPath 查询/评估中返回?通过阅读本文,您似乎可以创建和使用它们,但您永远不会将它们作为查询的返回项目。
  3. 数组是否仅在 JSON 查询时返回?通过阅读本文,我认为情况就是如此。这只是映射到一个 JSON 数组 - 对吗?
0 投票
1 回答
206 浏览

xml - XPath 3.1(不是 XQuery)中有没有办法对结果进行排序?

我浏览了规范,找不到任何东西。但我认为 3.1 支持排序。

更新(对不起,我倾向于假设人们可以读懂我的想法,但我没有列出足够的细节):

我们在 Java 中这样做,所以我们调用:

所以我们的查询通常是“/root/employees/employee”来获取所有员工的列表(来自 Southwind.xml)。

用 SQL-ish 术语来说,我们希望让我们的用户能够执行以下操作:

“/root/employees/employee 按姓氏降序,名字升序排列”。

根据下面的答案,我如何在 Java 代码中传递它?我看到了这个例子,但我不认为是 Java 代码(如果是,我不懂语法)。

而且,它可以在多个节点上排序(即,如果姓氏相等,则按名字排序)?

在此处使用示例代码提出更详细的问题。

0 投票
2 回答
151 浏览

xpath - XPath 3.1 中地图的用途/用途是什么?

我理解 XPath 3.1 中对数组类型的需求,因为它们是 JSON 的基础。是的,我知道您可以在 XPath 查询中创建文字 map()。

但是有没有一种方法可以构造 XML 或 JSON,其中查询自然会返回针对底层文档的 XPath 查询的映射?还是仅在将结果转换为地图然后对其进行操作的情况下才存在?

0 投票
1 回答
136 浏览

sorting - 如何使用多个排序键从 Java 调用撒克逊语中的 fn:sort()

从 Java(而不是 XSLT)调用 Saxon 中的 sort 函数时,如何使用它。例如,对于查询(在 Northwind 数据库上建模的数据),我可以使用以下方法获取未排序的数据:

但我想让它按如下方式排序(在此处使用 SQL 语法):

如何编写查询来完成此操作?

完整的代码在SaxonQuestions.zip(减去许可证密钥) - TestSort.java 中。

测试排序.java

XMLDatasource.java

0 投票
0 回答
420 浏览

saxon - 这是使用 Saxon 获取 XML 文件中所有元素和属性的最佳方式吗?

我们的程序显示了一个树形控件,显示了它们用作数据源的 XML 文件的元数据结构。因此它会显示 XML 文件中使用的所有元素和属性,如下所示:

对于用户没有向我们传递 XSD 文件的情况,我们需要遍历 XML 文件并构建元数据结构。

完整的代码位于SaxonQuestions.zip和 TestBuildTree.java 中,下面也列出了。

我担心我的代码不是最有效的,甚至可能是错误的。它有效,但它适用于我测试过的 3 个 XML 文件。我的问题是:

  1. 从 DOM 获取根元素的最佳方法是什么?它是在遍历 DOM 根节点的子节点吗?
  2. 确定元素是否有数据(而不仅仅是子元素)的最佳方法是什么?如果没有,我能想到的最好的方法会抛出异常,我认为执行快乐路径的代码不应该抛出异常。
  3. 获取元素或属性中保存的数据类的最佳方法是什么?是不是:((XdmAtomicValue)((XdmNode)currentNode).getTypedValue()).getValue().getClass();
  4. 遍历所有节点以使用 XdmNode.axisIterator 的最佳方式是什么?并像我在这段代码中那样做?

TestBuildTree.java

XMLDatasource.java

0 投票
1 回答
112 浏览

xsd - 加载 XML 和 XSD 文件后,如何从 Saxon 读取架构 (XSD)?

我们的程序显示了一个树形控件,显示了它们用作数据源的 XML 文件的元数据结构。因此它会显示 XML 文件中使用的所有元素和属性,如下所示:

对于用户没有向我们传递 XSD 文件的情况,我们需要遍历 XML 文件并构建元数据结构。

完整的代码位于SaxonQuestions.zip和 TestBuildTreeWithSchema.java 中,下面也列出了。

下面的代码有效,但它有一个问题。假设在 Employee 下有一个 SpouseName 元素。仅当员工已婚时才会填充。如果我的样本数据文件都是未婚员工怎么办?那么下面的代码不知道有 SpouseName 元素。

所以我的问题是 -我怎样才能直接阅读架构,而不是使用下面的代码。如果我阅读架构,那么我会得到每个节点和属性,包括可选的。我也得到了类型。并且架构可选地具有每个节点的描述,我也明白了。

因此,我需要阅读架构本身。我怎样才能做到这一点?

第二个问题 - 为什么是 int BigInteger 而不是 Integer 或 Long 的类型?我在Southwind.xmlSouthwind.xsd中使用 Employee/@EmployeeID 看到了这一点。

TestBuildTreeWithSample.java

XMLDatasource.java

0 投票
1 回答
234 浏览

json - 如何将 JSON 文件加载到在 Java 中运行的 Saxon 中的 DOM 中?

在我的 Java 代码中,我试图创建一个作为 JSON 文件内容的 Saxon 文档 (DOM)。这应该是可能的,但我的代码失败了。

完整的代码位于SaxonQuestions.zip和 TestLoadJson.java 并且也在下面列出。在此代码中,evaluate() 失败。

TestLoadJson.java