我正在解析一个大的xml文件。所以我使用XmlReader结合XElement而不是XElement.Load()。
我已经从XmlReader创建了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对象内容作为字符串保存在数据库中而不使用空格。以下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()
我用于XmlReader对象的XmlReaderSettings如下所示。我尝试了IgnoreWhitespace = true / false但没有运气,但我无法将其设置为true,因为跳过某些元素(跳过的原因,请参阅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对象但是因为XElement.Parse()将xml加载到内存中而无法使用XmlReader。
XElement el = XElement.ReadFrom(reader) as XElement;
XElement.Parse(el.ToString(), LoadOptions.None)
如何删除空格?
编辑:这就是我必须要做的事情:
reader.Read()
和XElement.ReadFrom(reader)
,因此跳过了其他所有元素。修复上面链接中提到的循环解决了这个问题。该问题与XmlReaderSettings
无关。 xelement.ToString(SaveOptions.DisableFormatting)
删除了漂亮的格式。答案 0 :(得分:1)
尝试使用this example形成XMLTextReader类。 XMLTextReader有一个方法“WhitespaceHandling”,您可以将其设置为none。回答这个问题会很有帮助,如果你能提供一个测试XML文件,那么测试就是XMLTextReader的工作原理。