XMLin删除了CDATA
我正在阅读一个带有XML::Simple(XMLin)的XML文件,在它的一些属性中执行一些替换操作,然后在另一个文件中将其XMLOut。我注意到,XMLOut前后包含的一些属性不再是了 输入示例:XMLin删除了CDATA,xml,perl,Xml,Perl,我正在阅读一个带有XML::Simple(XMLin)的XML文件,在它的一些属性中执行一些替换操作,然后在另一个文件中将其XMLOut。我注意到,XMLOut前后包含的一些属性不再是了 输入示例: 输出:此处的一些文本 是否有保留CDATA属性的选项?(我知道CDATA代表什么以及为什么使用它)听着,我知道你在评论中说,你想通过使用XML::simple来保持它的简单。但这用词不当XML::Simple不是——它实际上相当复杂。它是用于“简单”XML的 这是(甚至连报纸上都这么说)如果你通读
输出:此处的一些文本
是否有保留CDATA属性的选项?(我知道CDATA代表什么以及为什么使用它)听着,我知道你在评论中说,你想通过使用
XML::simple
来保持它的简单。但这用词不当<代码>XML::Simple不是——它实际上相当复杂。它是用于“简单”XML的
这是(甚至连报纸上都这么说)如果你通读一遍,你就会明白为什么
但也存在一些真正优秀的替代方案。我建议你要么看看学习曲线较低的,要么看看功能更全面的。如果您给我们一些XML示例,以及您到目前为止所做的尝试,我们可以给您一个示例,它可以满足您的需要。这可能比你目前所做的还要简单 听着,我知道你在评论中说,你想通过使用
XML::simple
来保持简单。但这用词不当<代码>XML::Simple不是——它实际上相当复杂。它是用于“简单”XML的
这是(甚至连报纸上都这么说)如果你通读一遍,你就会明白为什么
但也存在一些真正优秀的替代方案。我建议你要么看看学习曲线较低的,要么看看功能更全面的。如果您给我们一些XML示例,以及您到目前为止所做的尝试,我们可以给您一个示例,它可以满足您的需要。这可能比你目前所做的还要简单 文本是通过CDATA节提供的,这一事实在解析过程中丢失。此外,还有XML::Simple从不生成CDATA节 请注意,您提供的两个XML文档是100%等效的。但如果您确实想保留CDATA部分,我建议切换到[1]
$perl-MXML::LibXML-e'
我的$xml=”“;
XML::LibXML->new->parse\ u string($XML)->toff(\*STDOUT);
'
转换应该相对简单,因为XML::simple和XML::LibXML都提供功能相似的接口。比如说,
my$val=$node->{attr}代码>⇒ <代码>我的$val=$node->getAttribute('attr')
$node->{attr}=$val代码>⇒ <代码>$node->setAttribute('attr',$val)
- (@$node)的
⇒ <代码>用于($node->getChildren())
通过CDATA节提供文本的事实在解析过程中丢失。此外,还有XML::Simple从不生成CDATA节 请注意,您提供的两个XML文档是100%等效的。但如果您确实想保留CDATA部分,我建议切换到[1]
$perl-MXML::LibXML-e'
我的$xml=”“;
XML::LibXML->new->parse\ u string($XML)->toff(\*STDOUT);
'
转换应该相对简单,因为XML::simple和XML::LibXML都提供功能相似的接口。比如说,
my$val=$node->{attr}代码>⇒ <代码>我的$val=$node->getAttribute('attr')
$node->{attr}=$val代码>⇒ <代码>$node->setAttribute('attr',$val)
- (@$node)的
⇒ <代码>用于($node->getChildren())
强制性链接:即使是作者本人也不想使用它,这并不简单。谁知道呢,你可能遇到了他们提到的未知副作用之一。@Adrian:如果你“知道CDATA代表什么以及为什么使用它”,那么你就会知道字符串的普通表示法和CDATA表示法是等价的。任何正确处理XML的应用程序都不会关心使用哪一个<代码>XML::Simple是幼稚的,而不是简单易用,强烈建议您避免使用它。“到目前为止,它并没有让我失望”也许它只是让我失望了?见《帕尔蒙克斯》。强制性链接的可能重复:即使作者本人也不使用它,这并不简单。谁知道呢,你可能遇到了他们提到的未知副作用之一。@Adrian:如果你“知道CDATA代表什么以及为什么使用它”,那么你就会知道字符串的普通表示法和CDATA表示法是等价的。任何正确处理XML的应用程序都不会关心使用哪一个<代码>XML::Simple是幼稚的,而不是简单易用,强烈建议您避免使用它。“到目前为止,它并没有让我失望”也许它只是让我失望了?看《帕尔蒙克斯》上的。可能的复制品
$ perl -MXML::LibXML -e'
my $xml = "<name><![CDATA[some text here]]></name>";
XML::LibXML->new->parse_string($xml)->toFH(\*STDOUT);
'
<?xml version="1.0"?>
<name><![CDATA[some text here]]></name>