Я анализирую большой 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)
Как я могу удалить пробел?
Править: Это - то, что я должен был сделать:
reader.Read()
и XElement.ReadFrom(reader)
в том же повторении, таким образом, пропускающем любой элемент. Фиксация цикла, упомянутого в ссылке выше, решает это. Проблема не имеет никакого отношения XmlReaderSettings
. xelement.ToString(SaveOptions.DisableFormatting)
удаляет симпатичное форматирование.