Как удалить пробел из объекта XElement, созданного из XElement. ReadFrom (XmlReader)

Я анализирую большой XML-файл. Таким образом, я использую XmlReader в сочетании с XElement вместо XElement. Загрузка ().

Я создал как объект XElement из XmlReader как показано ниже и здесь.

static IEnumerable 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 путей работа. Просто примечание, если я загружаю xml в памяти с помощью XElement. Загрузка (), ToString (SaveOptions. DisableFormatting) работы.

     //xml saved in db with whitespace
 //want to save as this

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

XmlReaderSettings, которые я использую для объекта XmlReader, ниже. Я попробовал IgnoreWhitespace =true/false без удачи, но я не могу установить его столь верный, как некоторые элементы пропускаются (по причине пропуска, посмотрите, Почему XmlReader пропускает любой элемент, если нет никакого пробельного разделителя?).

    XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
    xmlReaderSettings.ProhibitDtd = false;
    //xmlReaderSettings.IgnoreWhitespace = true;//cannot use this setting

Это работает, если я анализирую объект XElement, но это побеждает целую цель использовать XmlReader в качестве XElement. Синтаксический анализ () загружает xml в памяти.

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) удаляет симпатичное форматирование.

8
задан Community 23 May 2017 в 10:27
поделиться