【问题标题】:Perl formatted output xmlPerl 格式化输出 xml
【发布时间】:2017-04-05 21:41:36
【问题描述】:

我需要将我的输出格式化为 xml。假设我在参数中得到数字,我希望这个数字意味着从前一个父元素那里有多少空间。比如2号:

<?xml version="1.0"?>
<LEVEL1>
  <LEVEL2>
    <LEVEL3/>
  </LEVEL2>
</LEVEL1>

或对于 4:

<?xml version="1.0"?>
<LEVEL1>
    <LEVEL2>
        <LEVEL3/>
    </LEVEL2>
</LEVEL1>

我喜欢 modul XML::LibXML,有没有办法在这个 modul 中做到这一点?或者哪个模块可以做到这一点?

还有一件事,如果我想在标题后设置(或不设置)新行怎么办?我怎样才能做到这一点?谢谢你

【问题讨论】:

    标签: xml formatting perl


    【解决方案1】:

    使用 XML::Twig,您可以使用 set_indent 来定义缩进字符串:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    use XML::Twig;
    
    my $indent_nb= shift @ARGV || 1;
    
    my $t= XML::Twig->new( pretty_print => 'indented');
    $t->set_indent( ' ' x $indent_nb);
    $t->parse( \*DATA)->print;
    
    __DATA__
    <?xml version="1.0"?>
    <LEVEL1>
      <LEVEL2>
        <LEVEL3/>
      </LEVEL2>
    </LEVEL1>
    

    【讨论】:

      【解决方案2】:

      我刚刚找到了两种可能的缩进解决方案:

      1) 通过 XML::Twig: http://search.cpan.org/dist/XML-Twig/Twig.pm

      2) 通过 XML::LibXML: 您可以通过 toString 方法设置缩进长度。

      在此处查看格式参数的说明: http://metacpan.org/pod/XML::LibXML::Document

      编辑:对不起,我太快了。您的意图是根据 input-xml 计算缩进大小 - 对吧?

      【讨论】:

      • 我想将输出的意图设置为我在参数中获得的值,但现在我在您的链接中读到:“libxml2 使用每个缩进级别 2 个空格字符的硬编码缩进。这个值可以不能在运行时更改。”所以我认为我无法更改 libxml 中的空格数,所以我必须以另一种方式进行。
      • 第一个链接失效了。
      【解决方案3】:

      您可以使用 XML::LibXML "to_string" 或 "to_file" 函数。两者都支持http://metacpan.org/pod/XML::LibXML::Document 中提到的“格式”。 在 to_file 函数中,它是文件名之后的第二个参数。

      可选的 $format 参数设置输出的缩进。这个 参数应该是一个整数值,它指定 应该使用缩进。格式参数可以有三个 如果使用不同的值:

      如果 $format 为 0,则文档按原样转储 已解析

      如果 $format 为 1,libxml2 将添加可忽略的空格,因此节点 内容更容易阅读。现有文本节点不会改变

      如果 $format 为 2(或更高),libxml2 将充当 $format == 1 但它 为每个文本节点添加前导和尾随换行符。

      libxml2 使用硬编码缩进,每个缩进 2 个空格字符 缩进级别。此值不能在运行时更改。

      您可以在my blog 上查看有关如何在 perl 中生成正确 xml 的小示例。

      【讨论】:

      • 是的,这可以帮助我格式化 xml,但我无法设置用于缩进的空格字符数,这正是我所需要的。
      • 啊,抱歉,我没听懂。
      猜你喜欢
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多