gpt4 book ai didi

xpath - CTS 和 xPath 都需要吗?

转载 作者:行者123 更新时间:2023-12-03 15:49:08 28 4
gpt4 key购买 nike

我有以下 CTS 搜索查询:

cts:search(/parent, 
cts:and-query((
cts:element-attribute-value-query(xs:QName('parent'), xs:QName('attr'), 'value'),
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-1'), 'value-2'),
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-2'), 'value-3')
))
)/child[@attr-1 eq 'value-2' and @attr-2 eq "value-3"]

(: Returns /parent/child elements matching criteria :)

我有一些关于 parent 的限定词,以及关于 child 的限定词。我想要的最终结果只是 children 。为了做到这一点,正如您从上面看到的,我必须:

  • 搜索符合父条件 + 子条件的文档
  • 得到那个文档后,按照上面相同的条件逻辑过滤掉子项

这行得通,但我必须在 cts:query 中使用与我在 xPath 中为 children 所做的相同的逻辑,这似乎真的很愚蠢。不必要地重复逻辑。

有没有一种方法可以在 cts:query 中完成这一切,而不必像上面的示例那样使用额外的 xPath 表达式?


这与我想要的类似,但它不适用于评论中指定的问题:

cts:search(/parent/child, 
cts:and-query((
cts:element-attribute-value-query(xs:QName('parent'), xs:QName('attr'), 'value'), (: The problem is this line... I can't filter by the parent, as it is above the scope of my first parameter (/parent/rule) :)
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-1'), 'value-2'),
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-2'), 'value-3')
))
)

最佳答案

您仍然可以查询父级,即使您的搜索是跨子级的:

cts:search(/parent/child, 
cts:and-query((
cts:element-attribute-value-query(xs:QName('parent'), xs:QName('attr'), 'value'),
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-1'), 'value-2'),
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-2'), 'value-3')
))
)

这将作为过滤搜索运行,但由于您无论如何都是手动进行过滤,因此性能应该大致相当。

更新:

我对此进行了测试,上面的断言是错误的。我认为这是正确的,但显然 cts:search 过滤将过滤与可搜索表达式不完全匹配的结果。 parent 将在可搜索表达式的范围之外。

理想情况下,您可以在 child 元素上拆分文档,但您至少可以像这样删除重叠的查询和 XPath:

cts:search(/parent/child, 
cts:and-query((
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-1'), 'value-2'),
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-2'), 'value-3')
))
)[parent::parent/@attr = 'value']

关于xpath - CTS 和 xPath 都需要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36184104/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com