【问题标题】:Ignore whitespace while reading XML读取 XML 时忽略空格
【发布时间】:2013-04-28 21:21:59
【问题描述】:

我有以下格式的 XML 格式

<Tag>
    Value
</Tag>

这来自我无法更改的外部数据源。 使用XmlReader时,内容有LinebreaksWhitepace

XmlReaderSettings xmlSettings = new XmlReaderSettings();
xmlSettings.Schemas = new System.Xml.Schema.XmlSchemaSet();
XmlReader schemaReader = XmlReader.Create(xsdStream);
xmlSettings.Schemas.Add("", schemaReader);
xmlSettings.ValidationType = ValidationType.Schema;
reader = XmlReader.Create(xmlFilename, xmlSettings);
// Parse the XML file.
while (reader.Read())
{
    if (reader.IsStartElement())
    {
         switch (reader.Name)
         {
             case "Tag":
                 string value = reader.ReadElementContentAsString();
                 Console.WriteLine(value);
                 break; 
          }
     }
}

我怎样才能避免这种情况?

【问题讨论】:

  • 有什么理由不使用value.Trim()?你真的需要使用XmlReader 而不是 LINQ to XML 或类似的吗? (除非您正在阅读一个巨大的文档,否则首先将整个内容解析为 DOM 会更简单。)

标签: c# .net xml xml-parsing


【解决方案1】:

答案无效

这个答案似乎不起作用,但我暂时离开它以避免其他人建议它。如果有人发布更好的答案,我会删除它。

您是否尝试设置XmlReaderSettings.IgnoreWhitespace

不重要的空白包括用于分隔标记以提高可读性的空格、制表符和空白行。元素内容中的空白就是一个例子。

出于某种原因,这不会影响ReadElementContentAsString 甚至是文本节点的Value 属性。

简单回答

您可以拨打Trim:

string value = reader.ReadElementContentAsString().Trim();

这不会删除 内容行之间的换行符,当然...如果您需要这样做,您可以随时使用 string.Replace

(正如我在评论中提到的,我个人更喜欢使用 LINQ to XML 而不是 XmlReader,除非您真的阅读的内容太大而无法放入内存,但这是另一回事。)

【讨论】:

  • XmlReaderSettings.IgnoreWhitespace 仅影响仅由空格组成的文本节点。在这种情况下,&lt;Tag&gt; 包含文本节点“\r\n····Value\r\n”。
  • 感谢您的回复。我个人也想切换到 LINQ,但我的项目需要使用 .net 2.0 构建。
  • @Razer:你仍然可以使用XmlDocument,它比XmlReader 更容易使用——至少,我确实觉得它更容易。
猜你喜欢
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-29
相关资源
最近更新 更多