我正在解析一个大的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)
编辑:这是我必须做的:
-
元素跳过是由于两次读取
reader.Read()
和
XElement.ReadFrom(reader)
在同一个迭代中,从而跳过其他元素。修复上面链接中提到的循环可以解决这个问题。这个问题与我无关
XmlReaderSettings
.
-
xelement.ToString(SaveOptions.DisableFormatting)
删除漂亮的格式。