Perl XML::LibXML是否可以解析奇怪的标记?

Perl XML::LibXML是否可以解析奇怪的标记?,perl,xml-libxml,Perl,Xml Libxml,是否可以获取XML::LibXML来解析下面示例中所示的节点?我意识到,通过将“*”指定为节点名的一部分,我可能正在创建无效的XML,如果有人能解释一下它无效的原因,我将不胜感激: use strict; use warnings; use XML::LibXML; my $doc = XML::LibXML->createDocument; my $quirky = XML::LibXML::Element->new( 'YAK*' ); $quirky->appendT

是否可以获取
XML::LibXML
来解析下面示例中所示的节点?我意识到,通过将
“*”
指定为节点名的一部分,我可能正在创建无效的XML,如果有人能解释一下它无效的原因,我将不胜感激:

use strict;
use warnings;
use XML::LibXML;

my $doc = XML::LibXML->createDocument;

my $quirky = XML::LibXML::Element->new( 'YAK*' );
$quirky->appendText( 'Important Data' );

$doc->setDocumentElement( $quirky );

print $doc->toString;  # <?xml version="1.0"?>
                       # <YAK*>Important Data</YAK*>

my $data = XML::LibXML
           ->new
             ->parse_string( $doc->toString );
使用严格;
使用警告;
使用XML::LibXML;
my$doc=XML::LibXML->createDocument;
my$quirky=XML::LibXML::Element->new('YAK*');
$quirky->appendText(‘重要数据’);
$doc->setDocumentElement($quirky);
打印$doc->toString;#
#重要数据
my$data=XML::LibXML
->新的
->解析字符串($doc->toString);
输出:

<?xml version="1.0"?>
<YAK*>Important Data</YAK*>
:2: parser error : error parsing attribute name
<YAK*>Important Data</YAK*>
    ^
:2: parser error : attributes construct error
<YAK*>Important Data</YAK*>
    ^
:2: parser error : Couldn't find end of Start Tag YAK line 2
<YAK*>Important Data</YAK*>
    ^
:2: parser error : Extra content at the end of the document
<YAK*>Important Data</YAK*>
    ^

重要数据
:2:分析器错误:分析属性名称时出错
重要数据
^
:2:分析器错误:属性构造错误
重要数据
^
:2:分析器错误:找不到开始标记第2行的结尾
重要数据
^
:2:分析器错误:文档末尾有额外内容
重要数据
^

*
不是元素名称中的有效字符,因为规范不允许此类字符出现在元素名称中。请参阅。

如果打开
恢复
选项,它将尝试工作-

my $parser = XML::LibXML->new;
$parser->recover_silently(1);
my $doc2 = $parser->parse_string( $doc->toString );
print $doc2->toString;
但是,正如您所看到的,虽然它可以解析一个无效的文档,但它不能/不会往返一个-

<?xml version="1.0"?>
<YAK/>


我明白了。。。那么,用
XML::LibXML
解析这一点几乎是不可能的吗?@Zaid,正确。libxml是一个验证解析器。您必须使用一些s///之类的东西来预处理XML。