gpt4 book ai didi

xml - XPath 能否仅返回具有 X 子级且具有命名空间的节点?

转载 作者:行者123 更新时间:2023-12-02 02:44:32 24 4
gpt4 key购买 nike

这个问题是Can XPath return only nodes that have a child of X?的延续.

我想找到所有具有 foo 的“宠物”,其中一些宠物有命名空间,而其他宠物则没有。

是否可以使用 XPath 仅选择具有特定子元素的节点?例如,在此 XML 中,我只需要 pets 中具有“bar”子级的元素。因此生成的数据集将包含蜥蜴和 pig 元素。

<pets xmlns="urn:cat-org:v1">
<cat>
<foo>don't care about this</foo>
</cat>
<dog xmlns:v1="urn:cat-org:v1">
<v1:foo>not this one either</foo>
</dog>
<lizard>
<bar>lizard should be returned, because it has a child of bar</bar>
</lizard>
<pig xmlns:v55="urn:cat-org:v1">
<v55:bar>return pig, too</bar>
</pig>
</pets>

任何建议都会很有效。

最佳答案

For example, from this XML I only want the elements in pets that have a child of 'bar'.

使用:

/*/*[*[local-name() = 'bar']]

这将选择至少有一个具有本地名称 "bar" 的子元素的顶部元素的所有子元素(无论是否存在前缀)。

基于 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="/*/*[*[local-name() = 'bar']]"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时(已更正为格式良好):

<pets xmlns="urn:cat-org:v1">
<cat>
<foo>don't care about this</foo>
</cat>
<dog xmlns:v1="urn:cat-org:v1">
<v1:foo>not this one either</v1:foo>
</dog>
<lizard>
<bar>lizard should be returned, because it has a child of bar</bar>
</lizard>
<pig xmlns:v55="urn:cat-org:v1">
<v55:bar>return pig, too</v55:bar>
</pig>
</pets>

计算 XPath 表达式并将所选元素复制到输出:

<lizard xmlns="urn:cat-org:v1">
<bar>lizard should be returned, because it has a child of bar</bar>
</lizard>
<pig xmlns="urn:cat-org:v1" xmlns:v55="urn:cat-org:v1">
<v55:bar>return pig, too</v55:bar>
</pig>

关于xml - XPath 能否仅返回具有 X 子级且具有命名空间的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11007152/

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