【问题标题】:Is there any possible way to convert XML::Twig object to XML::XPath object?有没有可能将 XML::Twig 对象转换为 XML::XPath 对象的方法?
【发布时间】:2011-12-10 16:03:51
【问题描述】:

我用XML::XPath解析xml很久了,现在到了修改属性值的情况。

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 脚本来更改起始点标记的时间,

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,同时我需要更改属性的值发送给我自己的 PM 之前的标准 xml。

提前致谢。

非常感谢任何帮助!

rndpilot

【问题讨论】:

    标签: xml perl xpath twig


    【解决方案1】:

    XML::Xpath 解析 XML,所以这就是您应该发送给它的内容,无论是在文件中还是作为字符串。

    现在,如果您想聪明一点,并且只想从树枝中提取信息,则可以使用 XML::Twig::XPath 代替 XML::Twig(::Twig::XPath 是XML::twig 分布),并且 twig 对象及其元素将获得足够的 DOM-ish 方法,以便 XML::XPath 能够对它们运行查询。我不确定这是否值得。

    我能想到的替代方法:

    • 为什么不直接使用 XML::XPath 更改属性? getAttributeNodessetValue 的组合应该可以做到,
    • 将 XML::XPath 替换为 XML::LibXML。界面非常相似(DOM + XPath),它是一个更好的模块
    • 使用 XML::Twig::XPath 在 XML::Twig 中获得完整的 XPath 支持

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      相关资源
      最近更新 更多