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

时间:2010-02-17 01:45:20

标签: 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对象但是因为XElement.Parse()将xml加载到内存中而无法使用XmlReader。

XElement el = XElement.ReadFrom(reader) as XElement;
XElement.Parse(el.ToString(), LoadOptions.None)

如何删除空格?

编辑:这就是我必须要做的事情:

  1. 跳过的元素是由于同一次迭代中的两次读取reader.Read()XElement.ReadFrom(reader),因此跳过了其他所有元素。修复上面链接中提到的循环解决了这个问题。该问题与XmlReaderSettings无关。
  2. xelement.ToString(SaveOptions.DisableFormatting)删除了漂亮的格式。

1 个答案:

答案 0 :(得分:1)

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