【问题标题】:How do I preserve whitespace characters when parsing XML from C# LINQ从 C# LINQ 解析 XML 时如何保留空白字符
【发布时间】:2023-04-07 23:59:01
【问题描述】:

我需要在我的 C# 代码或我的 XML 文档中执行什么操作,以便 XDocument 解析器读取 Values 或 XElements 的文字空格?


背景

我有一个 XML 文档,其中一部分如下所示:

    <NewLineString>&#10;&#13;</NewLineString>
    <IndentString>    </IndentString>

我正在使用 LINQ 查询将每个 XELement 的值添加到数据字典中; .ForEach 部分如下所示:

    .ForEach(x => SchemaDictionary.Add(
        LogicHelper.GetEnumValue(x.Name.ToString()), x.Value));    

为了测试是否保留了空白值,我将打印出数据字典中每个值项的一行字符编号。在下面的代码中,x 代表一个KeyValuePair,而Aggregate 只是简单地制作一个字符整数值的字符串:

x.Value.ToCharArray()
    .Aggregate<char,string>("",(word,c) => word + ((int)c).ToString() + " " )
    ));

我希望看到10 13&lt;NewLineString&gt; 值和32 32 32 32&lt;IndentString&gt; 值。但是,没有为每个值打印任何内容(注意:XML 中的其他转义值,例如 &amp;lt; 正确打印了它们的字符编号)。

我需要在我的 C# 代码或我的 XML 文档中做什么,以便我的解析器将完整的空白字符串添加到数据字典中?

【问题讨论】:

  • 如何加载 XML 文档?

标签: c# .net xml linq whitespace


【解决方案1】:

或者只是将您的输入 xml 修改为:

<NewLineString>&#10;&#13;</NewLineString>
<IndentString xml:space="preserve">    </IndentString>

【讨论】:

    【解决方案2】:

    尝试以这种方式加载您的文档。

    XmlDocument doc = new XmlDocument();
        doc.PreserveWhitespace = true;
        doc.Load("book.xml");
    

    【讨论】:

    • 最初的问题是关于 LINQ XDocuments,而不是 System.Xml XmlDocuments。但是my web search 的关于XmlDocuments 的答案将我链接到这个问题,所以这个答案无论如何都是有用的。
    【解决方案3】:

    尝试使用 LoadOptions.PreserveWhitespace 加载您的 XDocument

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      相关资源
      最近更新 更多