XML - 查找给定节点遍历的路径

时间:2013-01-03 13:42:09

标签: xml perl xpath

我有一个类似

的xml
<Screen>
    <window name="gui">
        <widget name="status" pos="0:0">
            <timedate name="timedate"/>
            <message name="message"/>
        </widget>
    </window>
</Screen>

关于这个xml的一个好处是每个节点都有唯一的名称。它不会在xml中的任何地方重复。

要查找节点,我可以使用xpath查询并获取其存在/不存在的结果,但我需要找到遍历的路径。

示例我可以使用xpath查询'// timedate'搜索timedate节点,但除此之外我还需要遍历的路径,即Screen / window / widget / timedate。

请告诉我一些检索路径的方法。

我们将非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

请参阅此答案以获取完整的解决方案https://stackoverflow.com/a/4747858/36305

虽然解决方案是在XSLT中,但如有必要,代码可以转换为任何其他编程语言。

答案 1 :(得分:1)

具体细节取决于您用于处理XML的模块。例如,在XML::XSH2中,您可以使用pwd命令。

更详细的XML::LibXML示例:

#!/usr/bin/perl
use warnings;
use strict;
use feature qw(say);

use XML::LibXML;

my $x = XML::LibXML->load_xml(location => 'example.xml');
my $n = $x->find('//timedate')->shift;
say $n->nodePath;

答案 2 :(得分:0)

CPAN有一个工具xpathify,它本身就是HTML::Untemplate包的一部分:

screenshot