2011-10-19 61 views
1

我長時間使用XML::XPath來解析xml,現在情況已經到了修改屬性值的地步。是否有任何可能的方式將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> 

我寫了一個perl腳本來更改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); 

我有一些如何成功取代09至12,現在$twig有XML對象。如果我將此對象($twig)發送到使用XML::XPath解析xml的SetWindow.pm,則無法識別此對象。是否有任何可能的方法將XML::Twig對象轉換爲XML::XPath對象,以便XML::XPath將解析$twig對象中的值。

其實我已經使用XML::XPath作爲回來了,因此我必須發送XML::XPath對象給我所有的* .pm,像SetWindow.pm,同時我需要改變標準xml屬性的值之前發送給我自己的PM。

在此先感謝。

任何幫助非常感謝!

rndpilot

回答

2

XML :: Xpath的解析XML,所以這是什麼,你應該發送給它,無論是在文件或字符串。

現在如果你想變得聰明,並且你想要從樹枝中提取信息,你可以使用XML :: Twig :: XPath來代替XML :: Twig :: Twig :: XPath是XML :: twig發行版),並且該twig對象及其元素將獲得足夠的DOM-ish方法來使XML :: XPath能夠在它們上運行查詢。但我不確定這是否值得。

我能想到的其他方法:

  • 你爲什麼不改變屬性直接使用XML :: XPath的? getAttributeNodessetValue的組合應該這樣做,
  • 用XML :: LibXML替換XML :: XPath。界面非常相似(DOM + XPath的),這是一個好很多模塊
  • 使用XML ::嫩枝:: XPath來獲得XML完整的XPath支持::嫩枝