我在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)
您可以使用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)
在这种情况下,我通常使用树遍历方法而不是使用 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)