gpt4 book ai didi

xml - XPath、平面层次结构和停止条件

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

我需要从非常糟糕的 XML 构造 Start 对象。我为一个案例制作了 SAX 解析器,但它很乱,我想尝试 XPath。

我有以下 XML:

<doc>
<start/>
<a/>
<b/>
<item/>
<item/>
<item/>

<start/>
<item/>
<item/>
<item/>

<start/>
<b/>
<item/>
<item/>
<item/>

</doc>

但是我更喜欢这份文件(我没有):

<doc>
<start>
<a/>
<b/>
<item/>
<item/>
<item/>
<start/>

<start>
<item/>
<item/>
<item/>
<start/>

<start>
<b/>
<item/>
<item/>
<item/>
<start/>

</doc>

请假设我有第二个“开始”节点对象(来自第一个 XML 示例)。现在我想直接在这个节点之后获得“a”和“b”元素。但是,如果我从该节点(具有以下兄弟节点)对“b”节点进行相对查询,我将在第 3 个起始节点下获得节点。是否可以说“找到此节点之后的节点 X 但在节点 Y 上停止(返回 null)”?

我知道我可以使用“|”或多个查询,但这不是我想要的(尽管它也可能解决我的问题)。

谢谢。

最佳答案

如果您使用 XSLT 1.0,您还可以使用键 xsl:key 将相邻的兄弟分组,从而简化 XPath 表达式:

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>

<xsl:key name="k_adjChild"
match="/*/*[not(self::start)]"
use="generate-id(preceding-sibling::start[1])"
/>

<xsl:template match="doc">
<doc>
<xsl:apply-templates select="start"/>
</doc>
</xsl:template>

<xsl:template match="start">
<xsl:copy>
<xsl:copy-of select="key('k_adjChild', generate-id())" />
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

关于xml - XPath、平面层次结构和停止条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865667/

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