是否可以让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 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*>
^
如果您打开recover
选项,它将尝试工作–
my $parser = XML::LibXML->new;
$parser->recover_silently(1);
my $doc2 = $parser->parse_string( $doc->toString );
print $doc2->toString;
但是,如您所见,尽管它可以解析无效文档,但它不能/不会往返一次
<?xml version="1.0"?>
<YAK/>
*
在元素名称中不是有效的字符,因为规范不允许此类字符出现在元素名称中。请参阅名称字符。