问题标签 [xpath-3.0]
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.
xml - 在 xpath3 中获取多个属性
当该价格手册的货币为“GBP”时,我必须按名称“product-id”获取所有属性。使用 xpath 时,此表达式工作正常。但是当我使用 xpath3 时,它只返回第一个匹配值而不是所有值。我需要的只是 xpath3 中 xpath 的等效表达式
工作 xpath 表达式:
#[xpath:/pricebooks/pricebook[./header/currency ="GBP"]/price-tables/price-table/@product-id]
我试过的xpath表达式:
#[xpath3('/pricebooks/pricebook[./header/currency ="GBP"]/price-tables/price-table/@product-id',payload,'STRING')]
预期:[产品1,产品2,产品4]
实际:产品1
输入 XML:
xpath-2.0 - XPath 3.0:按条件选择节点(按日期查找最大子节点)
给定 XML:
我必须找到 XPath 2.0 或 3.0,它将c
按表达式返回给我的节点列表:按属性查找d
此c
子节点的最大节点dt
(将其解析为date
),如果其v
属性值为“0”,则返回该c
节点。
我希望得到一个c
节点(@cid="c0"),因为/root/c[cid="c1"]/d[@dt="2016-01-01"]/@v
不等于 0(等于 1)。
到目前为止,我一直坚持使用此 XPath:
它给了我一个错误(我正在使用 Oxygen XML Editor,XPath 3.0):
XPath 因以下原因而失败:没有为以布尔值、数字、字符串或 URI 以外的原子值开头的序列定义有效的布尔值
我想这是由于滥用max
功能,但无法使其正常工作。
更新:
- 让我们假设
c
节点将具有其属性d
的唯一最大值的子节点。dt
我还尝试了 XPath 3.0 表达式:
/root/c[d[@dt=max(.//@dt/xs:date(.))]/@v="0"]
但它返回了我所有的节点(错误的结果)。
xml - XPath 3.0 将日期差异与持续时间文字进行比较
给定 XML:
使用 XPath 3.0 我必须找到所有c
节点,其中至少有一个d
子节点,其d2-d1
属性值差异小于或等于 30 天。d1
和d2
值是YYYY-MM-DD
格式的日期。我试过 XPath:
/root/c[d/xs:date(@d2)-d/xs:date(@d1)<=30]
但我有错误:
Cannot compare xs:dayTimeDuration to xs:integer
我XPath Builder
在XPath 3.0
模式中使用Oxygen XML Editor v18
. 我想这个错误是由于不正确的持续时间设置造成的。请建议如何在 XPath 3.0 中将持续时间指定为文字。谢谢!
xml - XSLT 中的 XPath 3.0 XML 解析函数
我有一个字符串序列,我需要使用 XSLT 将其解析为 XML。例如:
<span>Foo</span> & <span>bar</span> have been tagged.
当我尝试使用 fn:parse-xml-fragment (使用 Saxon-PE 9.6.0.5)解析它时,会引发两个错误:
- 实体名称必须紧跟实体引用中的“&”。
- FODC0006:parse-xml-fragment() 的第一个参数不是格式正确且名称空间格式正确的 XML 片段。
如果我&
从输入文本中删除实体,那么它会正确解析。但是,如果实体在输入中被转义,为什么会导致 XML 解析失败?
xml - 递归 DTD 中的 XPath 查询
我正在使用 XPath 3.0,但遇到以下问题。我需要编写一个返回 true/false 的函数,检查资源(文件和文件夹)的名称是否使得所有资源都具有不同的路径名。
我能够检索特定文件夹的祖先节点文件夹的名称,但是我想不出如何从中构建“路径名”然后执行比较。任何想法?
mule - 无法通过 xpath3 检索骡子中的 xml 元素
从请求中将卡号保存在卡号变量中的代码。
下面是有效载荷
卡号在日志中为空字符串
mule - 将 xml 响应转换为有效负载
我有这样的回应 -
现在我必须从中创建一个有效负载,以便我只能插入<tag_id>
到<object_id>
数据库表中。
对此有何建议?我试图通过 Xpath3 使用 Dataweave,但它对我不起作用。
xml - XPath:为什么 /document-node() 匹配文档节点?
XPath 表达式/
返回文档节点。
一个 XPath 表达式/html
等效于/child::html
并且给定一个 HTML 文档将返回 html 元素。这当然是通过转到文档节点(由 表示/
)然后找到作为 html 标记的子元素来评估的。
那么为什么/document-node()
实际上返回文档节点?
给定一般的 XPath 表达式规则,我假设/document-node()
它等价于/child::document-node()
,并且/child::document-node()
应该返回一个空节点序列(因为文档节点永远不是文档节点的子节点)。事实上/child::document-node()
确实返回了一个空节点序列,这让我相信它/document-node()
不等于/child::document-node()
. 这似乎违反了一般 XPath 表达式规则,其中空轴是隐含的子轴1。
是否有一些特殊规则,当你有一个document-node()
轴的步长时,假设是self
而不是child
?我正在使用最新版本的 Altova XMLSpy (2018 sp1)。或者,这是 XMLSpy 中的错误吗?还是我对一般 XPath 表达式规则的某些理解不正确?
注意:对于任何尝试这个的人,只有 XPath 2 和 XPath 3 支持document-node()
。
1更新:作为一个不相关的 FYI,我从 Mads Hansen 的回答中学到了一些新东西:在 XPath 2 和 XPath 3 中,除非有属性测试,否则空轴是隐含的子轴;如果有一个属性测试,它实际上是一个隐含的属性轴。所以 while/html
是隐含/child::html
的,/attribute()
是隐含的/attribute::attribute()
。
xml - XPath 3.x - 排序功能
我需要使用普通的 XPath 3.0 对一系列元素进行排序,所以没有 XQuery、没有 XSL-T 和没有代码。我试过以下这个关于如何使用排序功能的答案,但我不是 XPath 专家,所以我不知道如何使用它。
所以,我的文档基本上有以下结构:
我想按日期升序排列三个下一个约会。因此,从现在开始的下一个约会位于结果序列的第一个位置,并且从距现在最近的第三个日期开始的约会应该是序列的最后一个元素。下面显示的查询为我提供了尚未发生的约会,但我无法弄清楚如何正确应用排序功能。
谢谢,因为我找不到关于 fn:sort 函数的任何好的文档。
xpath - XPath 3.0 递归查询
我有一些具有类继承语义的 XML 数据,我想做一个将继承考虑在内的查询。我知道这在 XPath 1.0 中是不可能的,但我相信在 XPath 3.0 中是可能的,但我对 3.0 并不熟悉。
所以我有一个这样的结构:
不是,带有 name 的属性inherits
指向@id
另一个<elem>
。因此,基本上,我想查询@id
具有<elem>
(或不具有)属性 Z 的那些,无论该属性是在其自身上还是在通过该inherits
属性链接的任何元素上。例如:
因此,对具有属性的元素的查询c
将返回3
,其反向将返回1
and 2
。对具有属性的元素的查询b
将返回2
并且3
其反向将返回1
。最后,对具有属性的元素的调用a
将返回1
,2
和3
,并且它的反向不会返回任何内容。
我怎么做?