2011-10-19 23 views
1

私はxmlを解析するのに長い時間のためにXML::XPathを使用していますが、今や状況が属性値を変更するようになっています。XML :: TwigオブジェクトをXML :: XPathオブジェクトに変換する方法はありますか?

xmlはファイルで利用できますが、これは非常に似ています。

<AppName> 
    <Action AllDay='1'StartRace='1'/> 
    <StartPoint AM_PM='AM' Hours='09' Mins='30'/> 
    <EndPoint AM_PM='PM' Hours='06' Mins='30'/> 
</AppName> 

私は12と09を置き換える方法を成功裏にいくつかを持って、StartPointのタグの時間を変更する

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

my $fileName = 'Conf.xml'; 

my $twig = XML::Twig->new(
    twig_roots => { StartPoint => \&ReplaceAtriValue }, 
    twig_print_outside_roots => 1,); 

sub ReplaceAtriValue { 

    my ($twig, $startPoint) = @_; 
    if ('09' eq $startPoint->att('Hours')) 

    { 
     $startPoint->set_att(Hours => '12'); 
    } 
    $startPoint->print(); } 

$twig->parsefile($fileName); 

をperlスクリプトを書かれている、今$twigは、XMLオブジェクトを持っています。 XML::XPathを使ってXMLを解析するSetWindow.pmにこのオブジェクト($twig)を送信した場合、このオブジェクトは認識されませんでした。 XML::TwigオブジェクトをXML::XPathオブジェクトに変換する方法はありますか。XML::XPath$twigオブジェクトの値を解析します。

実際に私は長いバックのためにXML::XPathを使用していますので、私はXML::XPathオブジェクトをすべてSetWindow.pmのような自分の* .pmに送る必要があります。同時に、標準のxmlの属性の値を変更する必要があります私自身のPMに送る。

ありがとうございました。

ご協力いただきありがとうございます。

rndpilot

答えて

2

XML :: XPathはXMLを解析し、そのためには、ファイルまたは文字列のいずれかとして、それに送付しなければならないものです。

あなたが巧みになりたいなら、あなたが望むのは、小枝から情報を抽出することだけです.XML :: Twigの代わりにXML :: Twig :: XPathを使うことができます(:: Twig :: XPathはXML :: twigディストリビューション)、twigオブジェクトとその要素はXML :: XPathのための十分なDOM-ishメソッドを取得して、それらに対してクエリーを実行できます。私はそれがそれの価値があるとは確信していません。私は考えることができる

代替方法:

  • なぜあなたはXMLを使用して属性を直接変更しないでください:: XPathを? getAttributeNodessetValueの組み合わせで行う必要があります。
  • XML :: XPathをXML :: LibXMLに置き換えます。インターフェイスは非常によく似ています(DOM + XPath)。それはもっと良いモジュールです。
  • XML :: Twigを使用してXML :: Twigで完全なXPathサポートを利用するには
関連する問題