Я анализирую большой XML-файл. Поэтому я использую XmlReader в сочетании с XElement вместо XElement.Load ().
Я создал объект XElement из XmlReader, как показано ниже, и здесь .
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 способов не работает. Просто обратите внимание, если я загружаю XML в память с помощью XElement.Load (), 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()
Ниже приведены XmlReaderSettings, которые я использую для объекта XmlReader. Я попытался IgnoreWhitespace = true / false безуспешно, но я не могу установить его как true, так как некоторые элементы пропущены (см. Почему XmlReader пропускает все остальные элементы, если нет разделителя пробелов? ) .
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)
удаляет красивое форматирование.