0

XML 構成ファイルの解析にlibxml2を使用しています。最新の機能要求には、「意味のある空白の正しい処理」が含まれます。たとえば、改行を保持する必要があります。

現在、属性値をxmlGetPropで取得しています。

通常、空白はXMLパーサーによって正規化されることを知っています-標準が要求するとおりです(すべての空白を空白文字に置き換え、複数の空白文字を融合し、先頭と末尾の空白文字を削除します)。

属性に埋め込まれた改行が確実に保持されるようにする方法があるかどうか疑問に思います。

  • 別のlibxml2機能を使用して、スペースを保持したまま XML 属性を解析できますか?
  • libxml2にそれをさせるDTDまたはスキーマの方法はありますか? 現在、私はそれらを使用していません。
4

2 に答える 2

0

xml:space属性またはxmlNodeGetSpacePreserve()を試しましたか?

<para xml:space="preserve">

見る :

  1. xmlNodeGetSpacePreserve()@LibXMLドキュメント;
  2. 空白を保持するためのXML ;
  3. ホワイトスペース@MSDN
于 2013-01-25T14:14:03.607 に答える
0

ご指摘のとおり、これは XML 仕様で必要とされているため、DTD またはスキーマで正規化を停止する方法はありません。

おそらく libxml の html パーサーを使用できますが、そのコマンドライン xmllint ユーティリティと入力ファイルを使用して、

<a>
<b x="1
2
3"/>
</a>

私は得る

$ xmllint abc.xml
<?xml version="1.0"?>
<a>
<b x="1 2 3"/>
</a>

そのため、改行はなくなりましたが、次のようになります。

$ xmllint --html abc.xml
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><a>
<b x="1
2
3"></b>
</a></body></html>

改行は保持されます (偽の推論された html と本文が追加されましたが、アプリケーションでの解析後にそれらが失われる可能性があります)。

于 2013-01-25T11:44:39.207 に答える