hIp*_*pPy 8 xelement whitespace xmlreader
我正在解析一个大的xml文件.所以我使用XmlReader结合XElement而不是XElement.Load().
我已经从XmlReader中的XElement对象创建的,如下所示,并在这里.
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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想将此XElement对象内容作为字符串保存在数据库中而不使用空格.以下3种方式都不起作用.请注意,如果我使用XElement.Load()在内存中加载xml,则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()
Run Code Online (Sandbox Code Playgroud)
我用于XmlReader对象的XmlReaderSettings如下所示.我尝试IgnoreWhitespace = true/false没有运气,但我不能将其设置为true,因为跳过一些元素(为了跳过原因,请参阅为什么XmlReader在没有空格分隔符的情况下跳过所有其他元素?).
XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
xmlReaderSettings.ProhibitDtd = false;
//xmlReaderSettings.IgnoreWhitespace = true;//cannot use this setting
Run Code Online (Sandbox Code Playgroud)
如果我解析XElement对象,但是因为XElement.Parse()将xml加载到内存中,那么它就失败了使用XmlReader的全部目的.
XElement el = XElement.ReadFrom(reader) as XElement;
XElement.Parse(el.ToString(), LoadOptions.None)
Run Code Online (Sandbox Code Playgroud)
如何删除空格?
编辑:这是我必须做的:
reader.Read()并XElement.ReadFrom(reader)在同一次迭代中,因此跳过每个其他元素.修复上面链接中提到的循环解决了这个问题.这个问题与此无关XmlReaderSettings.xelement.ToString(SaveOptions.DisableFormatting) 删除漂亮的格式.