Perl XML :: Twig问题请

jo8*_*o82 3 perl xml-twig

我在Perl中使用XML :: Twig库,我不太确定我是如何(或者甚至)我可以做到以下几点.我还没有完成代码,因为我甚至不知道从哪里开始.我真的追求一些想法,我可以(希望)从那里开始......

所以我想使用XML :: Twig来查找值"This_Is_My_Name",它是标记"MyClass.Name"的子值.我我可以做这一部分,但指导将不胜感激.

然后我想得到"MyClass.Code"LinkValue号,在下面的例子中是"987654321".

希望有道理.所以我不知道如何以这种方式走动.

请帮忙 :)

所以我的XML文档如下,

<Object Class="MyClass" Id="123456789">
    <Property Name="MyClass.Link">
        <LinkValue>
            <Id>2468</Id>
        </LinkValue>
    </Property>
    <Property Name="MyClass.Code">
        <LinkValue>
            <Id>987654321</Id>
        </LinkValue>
    </Property>
    <Property Name="MyClass.Name">
        <StringValue>This_Is_My_Name</StringValue>
    </Property>
</Object>
Run Code Online (Sandbox Code Playgroud)

dog*_*ane 9

您可以使用xpaths来提取这些值.对于XPath的This_Is_My_Name/Object/Property[@Name="MyClass.Name"]/StringValue那为LinkValue/Object/Property[@Name="MyClass.Code"]/LinkValue/Id.代码是:

use XML::Twig;

my $twig = XML::Twig->new();

# parse the file
$twig->parsefile("x.xml");

# look for StringValue
@nodes=$twig->findnodes('/Object/Property[@Name="MyClass.Name"]/StringValue');
$stringVal=pop(@nodes)->text();
print $stringVal."\n";

# look for LinkValue
@nodes=$twig->findnodes('/Object/Property[@Name="MyClass.Code"]/LinkValue/Id');
$linkVal=pop(@nodes)->text();
print $linkVal;
Run Code Online (Sandbox Code Playgroud)


mir*_*rod 5

在这种情况下,我通常使用树遍历方法而不是使用 XPath。在这里first_elt找到属性,然后field(相当于first_child()->text)获取链接值。

#!/usr/bin/perl

use strict;
use warnings;
use XML::Twig;

my $twig = XML::Twig->new();

# parse the file
$twig->parsefile("so.xml");

# look for StringValue
my $property= $twig->first_elt( 'Property[@Name="MyClass.Code"]');
my $link= $property->field( 'LinkValue');
print $link;
Run Code Online (Sandbox Code Playgroud)