模式编译在 LibXML.pm 时失败

Compilation of pattern failed at LibXML.pm

提问人:jonah_w 提问时间:8/28/2019 更新时间:8/28/2019 访问量:46

问:

我正在使用 . 在构建这样的模式时:XML::LibXML

XML::LibXML::Pattern->new('//span[@class="entry"]');

它给出以下错误:

Compilation of pattern failed at /Users/chris/perl5/perlbrew/perls/perl-5.31.3/lib/site_perl/5.31.3/darwin-2level/XML/LibXML.pm line 2138.

但是这个工作正常:

XML::LibXML::Pattern->new('//span');

我不确定该部件是否不受支持,或者我只是做错了。[@class="entry"]XML::LibXML::Pattern

任何信息都是值得赞赏的。提前致谢。

perl html 解析 libxml2

评论


答:

3赞 ikegami 8/28/2019 #1

虽然是有效的 XPath,但这不是有效的模式

模式是 XPath 语言的一小部分,它仅限于(分离)涉及子轴和后代轴的位置路径,其缩写形式如下所示:

Selector ::=     Path ( '|' Path )*
Path     ::=     ('.//' | '//' | '/' )? Step ( '/' Step )*
Step     ::=     '.' | NameTest
NameTest ::=     QName | '*' | NCName ':' '*'

为了提高可读性,可以在选择器 XPath 表达式中使用空格,即使语法没有明确允许:可以在任何标记之前或之后的模式中自由添加空格,其中

token     ::=     '.' | '/' | '//' | '|' | NameTest

请注意,不允许使用谓词或属性测试。

(强调我的。