gpt4 book ai didi

xml - xpath父级,其所有子级元素名称均相同

转载 作者:行者123 更新时间:2023-12-03 16:06:29 24 4
gpt4 key购买 nike

如何选择其所有子元素节点名称都相同的父节点。在下面的示例中,应选择父节点<a id="1">,因为所有子节点名称均为b

<form>
<a id="1">
<b>1</b>
<b>2</b>
<b>3</b>
</a>
<a id="2">
<b>1</b>
<c>2</c>
<b>3</b>
</a>
</form>

最佳答案

I. XPath 1.0:

用:

/*/*
[not(*[position() > 1
and
not(name()= name(../*[1]))
]
)
]


这将选择顶部元素的任何子元素,以使 position()大于1的任何子元素的名称等于该元素的第一个子元素的名称。

说明:

正确使用 Double-Negation law

基于XSLT的验证:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
<xsl:copy-of select=
"/*/*
[not(*[position() > 1
and
not(name()= name(../*[1]))
]
)
]"/>
</xsl:template>
</xsl:stylesheet>


在提供的XML文档上应用此转换时:

<form>
<a id="1">
<b>1</b>
<b>2</b>
<b>3</b>
</a>
<a id="2">
<b>1</b>
<c>2</c>
<b>3</b>
</a>
</form>


将评估XPath表达式,并将所选元素(在本例中为一个)复制到输出:

<a id="1">
<b>1</b>
<b>2</b>
<b>3</b>
</a>




二。 XPath 2.0:

/*/*[every $vChild in * satisfies name($vChild) eq $vChild/../*[1]/name()]

关于xml - xpath父级,其所有子级元素名称均相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12936875/

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