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”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |