如何使用xpath获取最深层嵌套的元素节点? (使用XMLTWIG实现)
发布时间:2020-12-16 22:57:16 所属栏目:百科 来源:网络整理
导读:我需要使用方法(DEST id =“RUSSIA”method =“delete”/)和他的直接祖先(SOURCE id =“AFRICA”提取(XSLT,xpath,xquery …最好是xpath)最深层嵌套的元素节点“method =”modify“). 我不想用方法获得顶级节点(main method =“modify”或main method =“modi
我需要使用方法(DEST id =“RUSSIA”method =“delete”/>)和他的直接祖先(SOURCE id =“AFRICA”提取(XSLT,xpath,xquery …最好是xpath)最深层嵌套的元素节点“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更多结构的输出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读