)和他的直系祖先(SOURC-6ren">
gpt4 book ai didi

xpath - 如何使用xpath获取嵌套最深的元素节点? (使用 XMLTWIG 实现)

转载 作者:行者123 更新时间:2023-12-03 15:36:09 29 4
gpt4 key购买 nike

我需要提取(XSLT、xpath、xquery...最好是xpath)嵌套最深的元素 具有 的节点方法 (DEST id="RUSSIA"method="delete"/>)和他的直系祖先(SOURCE id="AFRICA"method="modify">)。

我不想使用方法( main method="modify"> 或 main method="modify"> )获取顶级节点。

带有方法的最深嵌套元素对应于实际操作。
带有方法的顶级元素实际上是不能考虑的虚拟操作。

这是我的 XML 示例文件:

<?xml version="1.0" encoding="UTF-8"?>
<main method="modify">
<MACHINE method="modify">
<SOURCE id="AFRICA" method="modify">
<DEST id="RUSSIA" method="delete"/>
<DEST id="USA" method="modify"/>
</SOURCE>

<SOURCE id="USA" method="modify">
<DEST id="AUSTRALIA" method="modify"/>
<DEST id="CANADA" method="create"/>
</SOURCE>
</MACHINE>
</main>

这是我期望的 Xpath 输出:
<SOURCE id="AFRICA" method="modify"><DEST id="RUSSIA" method="delete"/>

<SOURCE id="AFRICA" method="modify"><DEST id="USA" method="modify"/>

<SOURCE id="USA" method="modify"><DEST id="AUSTRALIA" method="modify"/>

<SOURCE id="USA" method="modify"><DEST id="CANADA" method="create"/>

我当前的 xpath 命令没有提供足够的结果。

命令 xpath("//[@method]/ancestor::*") 正在返回:
<main><MACHINE method="modify">                                        # NOT WANTED

<MACHINE method="modify"><SOURCE id="AFRICA" method="modify"> # NOT WANTED

<MACHINE method="modify"><SOURCE id="USA" method="modify"> # NOT WANTED

<SOURCE id="AFRICA" method="modify"><DEST id="RUSSIA" method="delete"/>

<SOURCE id="AFRICA" method="modify"><DEST id="USA" method="modify"/>

<SOURCE id="USA" method="modify"><DEST id="AUSTRALIA" method="modify"/>

<SOURCE id="USA" method="modify"><DEST id="CANADA" method="create"/>

我的 xmltwig 代码以获取附加信息(上下文):
#!/usr/bin/perl -w
use warnings;
use XML::Twig;
use XML::XPath;

@my $t= XML::Twig->new;
my $v= XML::Twig::Elt->new;
$t-> parsefile ('input.xml');

@abc=$t->get_xpath("\/\/[\@method]\/ancestor\:\:\*") ;
foreach $v (@abc) # outer 1
{
foreach $v ($v ->children) # internal 1
{
$w=$v->parent;
print $w->start_tag;
print $v->start_tag;
}
}

最佳答案

可以找到具有最大深度的节点

//*[count(ancestor::*) = max(//*/count(ancestor::*))]

但它的表现可能很糟糕,这取决于您的优化器的智能程度。

找到这些节点后,找到它们的祖先当然是微不足道的。但是您正在寻找比 XPath 单独提供的结构更多的输出。

关于xpath - 如何使用xpath获取嵌套最深的元素节点? (使用 XMLTWIG 实现),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11135620/

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