値が空白の XML ノードがあります。例:
<sampleNode> </sampleNode>
シリアライザーを使用して XML ドキュメントからデータを取得し、オブジェクトに格納しています。今、私が直面している問題は次のとおりです。上記のサンプル ノードのように、XML ノードの値に空白しか含まれていない場合、シリアライザーはそれを string.Empty として解釈します。
どうすればこれを克服できますか?実際の空白、つまり " " を取得する必要があります。本当にありがとう!
XmlDocument を使用していると仮定すると、PreserveWhiteSpaceプロパティを True に設定する必要があります。
XmlReader を使用する場合は、WhitespaceHandlingプロパティ WhitespaceHandling.All を設定します。
シリアル化中に空白を保持する方法については、MSDN の記事を参照してください。
さまざまなシリアライザーがこのさまざまな方法を処理します。このフォーラムの投稿に従って、これにはXmlTextReaderを使用してみてください。
サンプルクラス:
using System;
namespace GeneralTesting
{
[Serializable]
public class SampleNode
{
public string sampleNode = " ";
}
}
そしてサンプルプログラム:
XmlSerializer xmls = new XmlSerializer(typeof(SampleNode));
SampleNode sn = new SampleNode();
using (FileStream fs = File.Open(@"C:\test.xml", FileMode.Create))
{
xmls.Serialize(fs, sn);
}
using (FileStream fs = File.OpenRead(@"C:\test.xml"))
{
XmlReaderSettings xmlrs = new XmlReaderSettings();
xmlrs.IgnoreWhitespace = false;
using (XmlReader xmlr = XmlReader.Create(fs, xmlrs))
{
Console.WriteLine("!{0}!", ((SampleNode) xmls.Deserialize(xmlr)).sampleNode); //output: ! !
}
}
スペースの削除を避けるために、CDATA プレースホルダーを使用できます。
<sampleNode><![CDATA[ ]]></sampleNode>