3

我在 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>
4

2 回答 2

9

您可以使用 xpaths 来提取这些值。is的 xpath 和isThis_Is_My_Name的xpath 。代码将是:/Object/Property[@Name="MyClass.Name"]/StringValueLinkValue/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;
于 2011-04-13T12:16:24.620 回答
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;
于 2011-04-13T16:54:13.207 回答