1

XML::LibXMLPerl のモジュールを使用して一連の 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 として提示する必要があります。取得しているデータを変更する方法はありますか?

改行が文字参照に置き換えられるようにデータを前処理する方法があれば、データ&#xA;の処理時に LF 文字に変換されます。これは、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 に答える