3

Perl で XML::Twig ライブラリをいじっていますが、次のことをどのように (またはできるかどうか) よくわかりません。どこから始めればいいのかわからないので、まだコードを作成していません。私は本当にいくつかのアイデアを求めており、(うまくいけば)そこから行くことができます...

そこで、XML::Twig を使用して、タグ「MyClass.Name」の子値である値「This_Is_My_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を使用してこれらの値を抽出できます。のxpathThis_Is_My_Nameはで/Object/Property[@Name="MyClass.Name"]/StringValueあり、のxpathLinkValueはです/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 に答える