whitespace - 如何从 XElement.ReadFrom(XmlReader) 创建的 XElement 对象中删除空格

标签 whitespace xmlreader xelement

我正在解析一个大的 xml 文件。所以我将 XmlReader 与 XElement 结合使用,而不是 XElement.Load()。

我已经从 XmlReader 创建了 XElement 对象,如下所示和 here .

static IEnumerable<XElement> StreamRootChildDoc(string uri)
{
    using (XmlReader reader = XmlReader.Create(uri, xmlReaderSettings))
    {
        reader.MoveToContent();
        // Parse the file and display each of the nodes.
        while (reader.Read())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:
                    if (reader.Name == "Child")
                    {
                        XElement el = XElement.ReadFrom(reader) as XElement;
                        if (el != null)
                            yield return el;
                    }
                    break;
            }
        }
    }
}

我想将此 XElement 对象内容保存在数据库中作为没有空格的字符串。以下 3 种方式均无效。请注意,如果我使用 XElement.Load() 在内存中加载 xml,则 ToString(SaveOptions.DisableFormatting) 工作。
<root>  <child></child>  </root> //xml saved in db with whitespace
<root><child></child></root> //want to save as this

XElement.ToString(SaveOptions.DisableFormatting) //
XElement.ToString(SaveOptions.None)
XElement.ToString()

我用于 XmlReader 对象的 XmlReaderSettings 如下。我尝试了 IgnoreWhitespace =true/false ,但没​​有运气,但我无法将其设置为 true,因为某些元素被跳过(跳过的原因,请参阅 Why does XmlReader skip every other element if there is no whitespace separator? )。
    XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
    xmlReaderSettings.ProhibitDtd = false;
    //xmlReaderSettings.IgnoreWhitespace = true;//cannot use this setting

如果我解析 XElement 对象,它会起作用,但这会破坏使用 XmlReader 作为 XElement.Parse() 在内存中加载 xml 的整个目的。
XElement el = XElement.ReadFrom(reader) as XElement;
XElement.Parse(el.ToString(), LoadOptions.None)

如何删除空格?

编辑:这就是我必须做的:
  • 元素跳过是由于两次读取 reader.Read()XElement.ReadFrom(reader)在同一次迭代中,从而跳过所有其他元素。修复上面链接中提到的循环可以解决这个问题。问题与XmlReaderSettings无关.
  • xelement.ToString(SaveOptions.DisableFormatting)删除漂亮的格式。
  • 最佳答案

    尝试使用 this example形成 XMLTextReader 类。 XMLTextReader 有一个方法“WhitespaceHandling”,您可以将其设置为 none。如果您可以提供一个测试 XML 文件来测试 XMLTextReader 是否有效,那么回答这个问题会很有帮助。

    关于whitespace - 如何从 XElement.ReadFrom(XmlReader) 创建的 XElement 对象中删除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2277791/

    相关文章:

    php - 在 php 中使用正则表达式将每个前导和尾随空格替换为下划线

    c# - 如何检查 XElement 是否有任何子节点?

    c++ - 如何用转义空格分割句子?

    encoding - 如何最好地检测 XML 文件中的编码?

    c# - X文档解析错误

    c# - 在不知道类型的情况下反序列化 XML

    c# - 在 C# 中确定类的 default() 值

    jsf - 如何防止空格形成 JSF h :inputText

    terminal - 命令提示符中是否有任何转义序列,就像 c 语言一样?