【问题标题】:Is there any way to have XML::Simple output CDATA?有没有办法让 XML::Simple 输出 CDATA?
【发布时间】:2015-02-24 03:54:00
【问题描述】:

如果我在一个只安装了 XML::Simple 的系统上,并且我正在读取一个数据库以输出其中一些的 XML 表示,并且其中一些数据具有 HTML 代码,需要用CDATA标签……可以吗?

我真的不想跳过安装新模块的必要步骤,但如果使用 XML::Simple 无法安装,您会推荐哪个模块?

【问题讨论】:

  • XML::LibXML 和 XML::Twig 是流行的选择,它们都比 XML::Simple 提供了更多的控制
  • 您确定需要输出 CDATA 部分吗?对于任何(正常的)XML 处理器,内容是在 CDATA 部分中还是使用实体进行编码都应该没有区别。
  • @mirod - 我询问了将读取输出的 XML 文件的公司关于其中包含 HTML 内容的一些节点,他们说“只要确保 的内容节点被包装在 CDATA 中。这样我们就可以按原样导入它们“......这就是我所在的位置。也许他们可以处理它的编码。我应该问。谢谢。
  • “我真的不想跳过安装新模块的必要步骤” 我怀疑您之前根本没有安装过模块。它应该像命令行上的cpan install XML::Twig 一样简单。
  • XML::Simple 非常适合阅读 XML。 XML::Simple 在编写 XML 时完全没用(被 XML::Simple 以外的任何东西读取)。

标签: xml perl cdata xml-simple


【解决方案1】:

这会有点不完整。因为它将取决于您的输入/输出细节。

我喜欢 XML::Twig 作为 XML::Simple 的替代品。在XML::Simple 的文档中,您有:

不鼓励在新代码中使用此模块。其他模块也可以提供更直接和一致的接口。

XML::Twig 的文档中,您拥有(阅读上面的链接了解更多信息,为方便起见,转载):

创建一个包含 CDATA 部分的元素 foo:

my $foo= XML::Twig::Elt->new( '#CDATA' => "content of the CDATA section")
                              ->wrap_in( 'foo');

'#CDATA' 的属性,将创建元素的内容为 CDATA:

my $elt= XML::Twig::Elt->new( 'p' => { '#CDATA' => 1}, 'foo < bar');

创建一个元素

<p><![CDATA[foo < bar]]></>

我认为这应该包含您的需求?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2014-05-11
    • 2010-11-28
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多