如何在Perl的LibXML findnodes中使用正则表达式

如何在Perl的LibXML findnodes中使用正则表达式,xml,perl,xpath,Xml,Perl,Xpath,我在XML文档中包含以下内容: <ul class="toggle-control toggle-retain-state"> 这段代码的第一个问题似乎是属性是class,而不是id。所以我把它改为class,但它仍然找不到它。我猜这是因为类是toggle-control-toggle-retain-state,但我真正要寻找的是,只要它在class属性中看到toggle-control,就会找到匹配项。如何更改findnodes调用以实现此目的?使用: 备注:当XML文档的结构已

我在XML文档中包含以下内容:

<ul class="toggle-control toggle-retain-state">
这段代码的第一个问题似乎是属性是class,而不是id。所以我把它改为class,但它仍然找不到它。我猜这是因为类是toggle-control-toggle-retain-state,但我真正要寻找的是,只要它在class属性中看到toggle-control,就会找到匹配项。如何更改findnodes调用以实现此目的?

使用:

备注:当XML文档的结构已知时,请始终避免使用//缩写。使用//缩写可能会导致显著的效率低下。

使用:


备注:当XML文档的结构已知时,请始终避免使用//缩写。使用//缩写可能会导致效率低下。

好问题,+1。请参阅我的答案以获得完整的解决方案。对不起,我已放弃投票-现在完成:好问题,+1。请参阅我的答案以获得完整的解决方案。对不起,我已放弃投票-现在完成:我想我明白了,但我有语法错误。你能包含我最初的Perl代码行并合并你的解决方案吗?@Schenz:我不懂Perl,这是纯XPath。我已经验证了我的答案中的XPath表达式在语法和语义上是正确的。请阅读与XPath无关的问题的相应文档。看起来我不得不避开@symbol:我应该在web上找到好的XPath文档,这样我就可以自己解决这些问题了?@sid_com://ul[contains@class,切换控件]将选择许多可能不需要的ul元素,例如:,虽然这个答案中的XPath表达式没有选择这样的元素。我想我理解了,但是我得到了语法错误。你能包含我最初的Perl代码行并合并你的解决方案吗?@Schenz:我不懂Perl,这是纯XPath。我已经验证了我的答案中的XPath表达式在语法和语义上是正确的。请阅读与XPath无关的问题的相应文档。看起来我不得不避开@symbol:我应该在web上找到好的XPath文档,这样我就可以自己解决这些问题了?@sid_com://ul[contains@class,切换控件]将选择许多可能不需要的ul元素,例如:,而这个答案中的XPath表达式并没有选择这样的元素。
my ($toggle_container) = $xRoot->findnodes('.//*[@id = "toggle-control"]');
//ul[contains(concat(' ', @class, ' '), ' toggle-control ')]