我使用此代码创建具有预期输出的新节点:
<item desc="desc foobar"><![CDATA[qux]]></item>
代码 :
open my $fh,"<",$xml_file; binmode $fh; my $parser = XML::LibXML->new(); my $doc = $parser->load_xml(IO => $fh); # create a new node in XML file my $root = $doc->getDocumentElement(); my $new_element = $doc->createElement("item"); # FIXME $new_element->appendTextNode(sprintf '<![CDATA[%s]]>',join "\n",@input); $new_element->setAttribute('desc',$desc); $root->appendChild($new_element); close $fh; open my $out,'>',$xml_file; binmode $out; $doc->toFH($out); close $out;
它可以很好地创建新的元素文本,但我想知道如何在没有XML实体替换的情况下添加CDATA:我得到:
<item desc="dddd"><![CDATA[qux]]> # ^^^^
解决方法
很明显,appendTextNode()会自动转义文本节点中有问题的字符.这是你应该做的:
my $cdata_node = XML::LibXML::CDATASection->new( join "\n",@input ); $new_element->appendChild($cdata_node);
XML ::的libxml ::的CDATASection
$node = XML::LibXML::CDATASection->new( $content );
The constructor is the only provided function for this package. It is
required,because libxml2 treats the different text node types
slightly differently.The class inherits from XML::LibXML::Node
http://search.cpan.org/dist/XML-LibXML/lib/XML/LibXML/CDATASection.pod
XML ::的libxml ::节点
$childnode = $node->appendChild( $childnode );
The function will add the $childnode to the end of $node’s children…
http://search.cpan.org/~shlomif/XML-LibXML-2.0117/lib/XML/LibXML/Node.pod
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。