1

我有一个类似的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。

请建议我一些方法来检索路径。

您的帮助将不胜感激。

4

3 回答 3

1

有关完整解决方案,请参阅此答案https ://stackoverflow.com/a/4747858/36305 。

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

于 2013-01-03T14:24:38.673 回答
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;
于 2013-01-03T14:31:56.340 回答
0

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

截屏

于 2013-01-03T18:47:01.710 回答