加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 修复用于XML :: Twig的XPath谓词

发布时间:2020-12-16 06:22:20 所属栏目:大数据 来源:网络整理
导读:我正在尝试在Perl中编写一个子程序,它将在提供某些子节点的文本值时删除 XML中的给定节点. 给定的XML如下: Path To My Node ChildAValA/ChildA ChildBValB/ChildB ChildCValC/ChildC /Node /My /To/Path!-- A lot of siblings follow... -- 我正在使用的XPa
我正在尝试在Perl中编写一个子程序,它将在提供某些子节点的文本值时删除 XML中的给定节点.

给定的XML如下:

<Path>
  <To>
    <My>
      <Node>
        <ChildA>ValA</ChildA>
        <ChildB>ValB</ChildB>
        <ChildC>ValC</ChildC>
      </Node>
    </My>
  </To>
</Path>
<!-- A lot of siblings follow... -->

我正在使用的XPath表达式基本上是:

/Path/To/My/Node[ChildA="ValA" and ChildB="ValB" and ChildC="ValC"]

当我试图运行我的脚本时,我收到的错误如下:

Error in XPath expression
/Path/To/My/Node[ChildA="ValA" and ChildB="ValB" and ChildC="ValC"] at 
ChildA="ValA" and ChildB="ValB" and ChildC="ValC" at Twig.pm line 3353

我为此感到茫然,正在寻找建议.我试过谷歌搜索,但我找不到尝试在XML :: Twig中使用这样的谓词的工作示例.我不知道问题出在我的XPath语法中,或者我是如何使用XML :: Twig的.

为了更好的衡量,我也尝试过:

/Path/To/My/Node[ChildA/text()="ValA" and ChildB/text()="ValB" and ChildC/text()="ValC"]

也没有运气.解决办法是什么?

解决方法

在测试中,Node是上下文节点,因此您必须说:

/Path/To/My/Node[./ChildA="ValA" and ./ChildB="ValB" and ./ChildC="ValC"]

这适用于使用XML :: XPath的简短测试程序.

编辑:对不起,我不太熟悉XML :: Twig,我对其XPath功能做了一个不正确的假设.根据文档,它仅支持“XPath-like”语法,但不会升级到示例的复杂程度.但是,如果您使用XML :: Twig :: XPath而不是XML :: Twig,那么您将获得完整的XPath引擎:

my $twig = XML::Twig::XPath->new;
$twig->parse('your string');
my $nodes = $twig->findnodes('/Path/To/My/Node[ChildA="ValA" and ChildB="ValB" and ChildC="ValC"]');
print $nodes;

这将打印“ValAValBValC”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读