1

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

<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 尊重换行符。任何的想法?

4

2 回答 2

4

XML 1.0 规范规定属性值(空格、CR、LF、制表符)中的任何空白字符必须在处理之前转换为空格

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

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

If there is any way you could preprocess the data so that your newlines are replaced with character references &#xA; then they will be translated to LF characters when the data is processed. This really should be done by whatever is generating the XML

于 2012-08-23T20:59:23.077 回答
3

XML 规范Attribute-Value Normalization部分需要XML::LibXML展示的行为。

对于空格字符(#x20、#xD、#xA、#x9),将空格字符(#x20)附加到标准化值。

没有记录的选项可以更改此行为。

如果假设属性值包含换行符,&#x0A;或者必须使用类似的值而不是实际的换行符。

于 2012-08-23T20:51:33.550 回答