gpt4 book ai didi

perl - 修复在 XML::Twig 中使用的 XPath 谓词

转载 作者:行者123 更新时间:2023-12-03 15:36:11 25 4
gpt4 key购买 nike

我正在尝试在 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”的语法,不会达到您示例的复杂程度。但是,如果您使用 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”。

关于perl - 修复在 XML::Twig 中使用的 XPath 谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6617462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com