gpt4 book ai didi

xml - 从xml获取一系列节点的xsl代码

转载 作者:行者123 更新时间:2023-12-04 06:39:33 30 4
gpt4 key购买 nike

我有一个这样的xml:

<persons>
<person name="a">
</person>
<person name="f">
</person>
<person name="b">
</person>
<person name="g">
</person>
</persons>

假设我想拥有名称为“f”的节点和名称为“g”的节点之间的所有节点
所以,用 xslt 解析它,它应该产生:
<person name="b">
</person>

我怎样才能做到这一点??

感谢您的帮助,谢谢!!

最佳答案

在一个简单的列表(不是组)中,这个 XPath 1.0 表达式:

/persons/person[preceding-sibling::person[@name='f']]
[following-sibling::person[@name='g']]

如果有组,这个 XPath 1.0 表达式:
/persons
/person
[count(.|preceding-sibling::person[@name='f'][1]
/following-sibling::person[@name='g'][1]
/preceding-sibling::*) =
count(preceding-sibling::person[@name='f'][1]
/following-sibling::person[@name='g'][1]
/preceding-sibling::*)]

在 XPath 2.0 中,您可以在两种情况下使用:
/persons/person[preceding-sibling::person[@name='f'][1]
/following-sibling::person[@name='g'][1] >> .]

在 XSLT 1.0 中,您可以使用:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="kPersonByMarks" match="person"
use="concat(generate-id(
preceding-sibling::person[@name='f'][1]),
'+',
generate-id(
following-sibling::person[@name='g'][1]))"/>
<xsl:template match="person[@name='f']">
<xsl:copy-of select="key('kPersonByMarks',
concat(generate-id(),'+',
generate-id(
following-sibling::person
[@name='g'][1])))"/>
</xsl:template>
</xsl:stylesheet>

输出:
<person name="b"></person>

编辑 :更正 XPath 1.0 和 XPath 2.0 的“包括”表达式

关于xml - 从xml获取一系列节点的xsl代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4430977/

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