2

一部のデータをXMLスキーマに出力するシステムを作成しています。このスキーマの一部のフィールドは、エンドシステムによって潜在的にWordドキュメントレイアウトに解析されるため、フォーマットを保持する必要があります。これを行う<![CDATA[Some formatted text]]>には、App.Configファイル内でタグを使用し、それをスキーマからxsd.exeで生成されたクラスの適切なプロパティフィールドに配置します。理想的にはフォーマットは問題にならないでしょうが、残念ながらそれはシステムがどのように進んでいるかということです。

App.Configセクションは次のようになります。

<header>
<![CDATA[Some sample formatted data]]>
</header>

データ割り当ては次のようになります。

HeaderSection header = ConfigurationManager.GetSection("header") as HeaderSection;
report.header = "<[CDATA[" + header.Header + "]]>";

最後に、Xml出力は次のように処理されます。

xs = new XmlSerializer(typeof(report));
fs = new FileStream (reportLocation, FileMode.Create);
xs.Serialize(fs, report);
fs.Flush();
fs.Close();

これにより、理論的には、最終的なXmlで、CDATAタグが周囲にある情報を含むセクションが生成されます。ただし、山括弧はとに変換され&lt;ています&gt;

Outout Escapingを無効にする方法を見てきましたが、これまでのところ、XSLTシートへの参照しか見つかりません。私も@"<[CDATA["弦を試してみましたが、やはり運がありません。

どんな助けでもいただければ幸いです!

4

2 に答える 2

5

マークアップとコンテンツを混同しています。

"<![CDATA[ ... ]]>"文字列を値に割り当てるとき、それはあなたがそこに入れたいコンテンツであると言っています。は、このXmlSerializerコンテンツからマークアップセマンティクスを推測しようとはしませんし、実際にそうすべきではありません。通常のルールに従って、単にエスケープします。

そこでCDATAマークアップが必要な場合は、シリアライザーに明示的に指示する必要があります。これを行う方法のいくつかの例はここにあります。

于 2010-06-11T10:37:32.663 に答える
0

変えてみましたか

report.header = "<[CDATA[" + header.Header + "]]>";

report.header = "<![CDATA[" + header.Header + "]]>";
于 2010-06-11T10:28:43.013 に答える