解析XML换行/换行字符,Perl的的libxml(Parsing XML with line br

2019-10-17 03:53发布

我试图解析一系列XML文件使用Perl的XML::LibXML模块。

<log date="2012-08-07 18:05:44.0" level="unit" label="2G-or-3G-server" name="unitnote" value="# Firmware level after downgrade
#
-&amp;gt; show /HOST

 /HOST
    Targets:
        bootmode
        diag
        domain ...."

当一些值包含从脚本的执行输出。 当我尝试分析这些值,我结束了类似以下内容:

my $value  = $log->findvalue('@value');
print "value: $value\n";

输出:

# Firmware level after downgrade    #   -&amp;gt; show /HOST  /HOST  Targets:      bootmode        diag        domain ....

我似乎无法找到任何方式有libxml的尊重换行。 任何想法?

Answer 1:

的XML 1.0规范说,在属性值的任何空白字符(空格,CR,LF,选项卡)必须被转换为处理之前的空间中

不幸的是任何正常工作的XML处理器会给你同样的问题

这是非常奇怪的XML。 它从哪里来的? 该value属性应该被呈现为PCDATA,以便它可以正确处理。 有什么办法可以改变你所得到的数据?

如果你能这样进行预处理,你换行与字符引用替换数据的任何方式&#xA; 然后,他们将被翻译时所处理的数据到LF的字符。 这确实应该无论是生成XML来完成



Answer 2:

该属性值标准化的部分XML规范 需要通过表现出的行为XML ::的libxml 。

对于一个空白字符(#X20,#xD,#xA,#X9),附加一个空格字符(#X20)与归一化值。

没有文档化选项来改变这种行为。

如果属性值是假设包含换行, &#x0A; 或类似的具有用于代替实际的换行的。



文章来源: Parsing XML with line breaks / newline characters with Perl's LibXML
标签: xml perl libxml2