【发布时间】:2011-07-07 21:38:32
【问题描述】:
我正在尝试在 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"]
也没有运气。解决办法是什么?
【问题讨论】:
-
您是将此表达式与
findnodes一起使用还是作为twig_handlers的触发器?findnodes,正如 Sean 所提到的,将允许您使用所有 XPath,前提是您使用 XML::Twig::XPath。触发处理程序的谓词受到更多限制,您需要为Node提供一个处理程序来测试子项的值。