gpt4 book ai didi

whitespace - 如何从 XElement.ReadFrom(XmlReader) 创建的 XElement 对象中删除空格

转载 作者:行者123 更新时间:2023-12-04 08:53:43 26 4
gpt4 key购买 nike

我正在解析一个大的 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 对象,它会起作用,但这会破坏使用 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)删除漂亮的格式。
  • 最佳答案

    尝试使用 this example形成 XMLTextReader 类。 XMLTextReader 有一个方法“WhitespaceHandling”,您可以将其设置为 none。如果您可以提供一个测试 XML 文件来测试 XMLTextReader 是否有效,那么回答这个问题会很有帮助。

    关于whitespace - 如何从 XElement.ReadFrom(XmlReader) 创建的 XElement 对象中删除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2277791/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com