gpt4 book ai didi

xml - XPath 多次生成包含相同节点的结果节点集?

转载 作者:数据小太阳 更新时间:2023-10-29 02:59:52 26 4
gpt4 key购买 nike

我在标题中试图表达的是:

给定一些我知道某个特定元素只出现一次的 XML,是否可以使用单个 XPath 查询来选择包含该元素两次的节点集?

我知道有一个“联合”运算符 (|),但这基本上是一个逻辑或,对吗?在 SQL 术语中,我正在寻找“联合所有”的等价物。

例如给定 XML 片段...

<toplevel>
<ElementIWant>
<SomeSubElement1>specific data</SomeSubElement1>
<SomeSubElement2>specific data 2</SomeSubElement2>
</ElementIWant>
</toplevel>

...是否有一个查询会给我一个等同于...的结果集

<ElementIWant>
...identical content...
</ElementIWant>
<ElementIWant>
...identical content...
</ElementIWant>

我还没有发现任何让我认为可以做到的事情 - 但这就是我问的原因......

最佳答案

正如其他答案所指出的,XPath 无法修改 XML 文档并生成新节点

根据 "set" 的定义,任何节点只能参与节点集一次。 .

但是,XPath 2.0 为我们提供了新的 sequence type , 允许重复项目。

为了让一个元素在一个序列中出现两次,可以使用 the sequence concatenation operator "," 如以下表达式:

/*/ElementYouWant, /*/ElementYouWant

将其放入 XSLT2.0 样式表中,就像这样简单:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:f="http://fxsl.sf.net/"
exclude-result-prefixes="f xs"
>

<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="/">
<t>
<xsl:sequence select=
"/*/ElementYouWant, /*/ElementYouWant"/>
</t>
</xsl:template>
</xsl:stylesheet>

并将此转换应用于此 XML 文档:

<toplevel>
<ElementYouWant>
<SomeSubElement1>specific data</SomeSubElement1>
<SomeSubElement2>specific data 2</SomeSubElement2>
</ElementYouWant>
</toplevel>

产生想要的结果:

<t>
<ElementYouWant>
<SomeSubElement1>specific data</SomeSubElement1>
<SomeSubElement2>specific data 2</SomeSubElement2>
</ElementYouWant>
<ElementYouWant>
<SomeSubElement1>specific data</SomeSubElement1>
<SomeSubElement2>specific data 2</SomeSubElement2>
</ElementYouWant>
</t>

请注意,如果使用 <xsl:sequence> 说明,没有新的 <ElementYouWant> 副本元素已创建——因此在 XSLT 2.0 中建议使用 <xsl:sequence>并避免使用 <xsl:copy-of> 这会创建(不必要的)节点副本。

关于xml - XPath 多次生成包含相同节点的结果节点集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/713111/

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