1

这次出乎意料的简单问题!:-) 有一个这样的 XML 文件:

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

现在我需要准确地阅读元素中的任何<data>内容。无论是像 U+0020 这样的单个空格。我天真的猜测:

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

但这会返回一个空字符串。白色空间丢失了。任何其他数据都可以正常读取。

我需要做什么才能让我的空间角色在这里?

浏览网页一段时间后,我尝试使用允许我设置的 XmlReader 读取 XML 文件,XmlReaderSettings.IgnoreWhitespace = false但这并没有帮助。

4

1 回答 1

7

xml:space="preserve"根据 W3C 标准和MSDN 文档,您必须在 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 回答