代码之家  ›  专栏  ›  技术社区  ›  hIpPy

如何从创建自的XElement对象中删除空白XElement.ReadFrom文件(XmlReader)

  •  8
  • hIpPy  · 技术社区  · 15 年前

    我正在解析一个大的xml文件。所以我将XmlReader与XElement结合使用,而不是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对象内容保存为字符串,不带空格。以下三种方法都不起作用。请注意,如果我使用XElement.加载(),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()
    

    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 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 回复  |  直到 8 年前
        1
  •  1
  •   Ali Khalid    13 年前

    尝试使用 this example