Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XMLin删除了CDATA_Xml_Perl - Fatal编程技术网

XMLin删除了CDATA

XMLin删除了CDATA,xml,perl,Xml,Perl,我正在阅读一个带有XML::Simple(XMLin)的XML文件,在它的一些属性中执行一些替换操作,然后在另一个文件中将其XMLOut。我注意到,XMLOut前后包含的一些属性不再是了 输入示例: 输出:此处的一些文本 是否有保留CDATA属性的选项?(我知道CDATA代表什么以及为什么使用它)听着,我知道你在评论中说,你想通过使用XML::simple来保持它的简单。但这用词不当XML::Simple不是——它实际上相当复杂。它是用于“简单”XML的 这是(甚至连报纸上都这么说)如果你通读

我正在阅读一个带有XML::Simple(XMLin)的XML文件,在它的一些属性中执行一些替换操作,然后在另一个文件中将其XMLOut。我注意到,XMLOut前后包含的一些属性不再是了

输入示例:

输出:
此处的一些文本


是否有保留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>