1

今回は意外と簡単な問題!:-) 次のような XML ファイルがあります。

<xml>
  <data> </data>
</xml>

ここで、要素に含まれるものを正確に読み取る必要があり<data>ます。U+0020 のような 1 つの空白でもかまいません。私の素朴な推測:

XmlDocument xd = new XmlDocument();
xd.Load(fileName);
XmlNode xn = xd.DocumentElement.SelectSingleNode("data");
string data = xn.InnerText;

しかし、それは空の文字列を返します。空白が失われました。他のデータは問題なく読み取ることができます。

ここで宇宙のキャラクターを取得するにはどうすればよいですか?

しばらく Web を閲覧した後、設定できる XmlReader を使用して XML ファイルを読み取ろうとしましたXmlReaderSettings.IgnoreWhitespace = falseが、役に立ちませんでした。

4

1 に答える 1

7

W3C標準とMSDNドキュメントxml:space="preserve"に従って、XMLで使用する必要があります。

W3C標準では、空白はドキュメント内のどこで発生するか、およびxml:space属性の設定に応じて異なる方法で処理されるように規定されています。混合要素のコンテンツ内またはxml:space = "preserve"のスコープ内で文字が出現する場合は、それらを保持して、アプリケーションに変更せずに渡す必要があります。その他の空白は保持する必要はありません。XmlTextReaderは、xml:space="preserve"コンテキスト内で発生する空白のみを保持します。

        XmlDocument xd = new XmlDocument();
        xd.LoadXml(@"<xml xml:space=""preserve""><data> </data></xml>");
        XmlNode xn = xd.DocumentElement.SelectSingleNode("data");
        string data = xn.InnerText; // data == " "
        Console.WriteLine(data == " "); //True

ここでテスト済み

于 2013-02-10T23:34:02.473 に答える