【发布时间】:2014-05-04 02:42:37
【问题描述】:
对于我的 XDocument 的一部分,看起来像这样
<name>
xEdKXBh
<first>kryrIQvg</first>
<family>kHymPPId</family>
</name>
我正在像这样修改特定的节点分支
switch (node.NodeType)
{
case XmlNodeType.Text:
var xtext = (XText)node;
xtext.Value = "somstring"
break;
case XmlNodeType.Element:
var xelement = (XElement)node;
xelement.Value = "somstring"
break;
default:
//Console.WriteLine(node);
break;
}
但无论我尝试了什么,我修改的部分总是这样结束,但文档的其余部分保持完美的格式不变。
<name>
xEdKXBh
<first>kryrIQvg</first><family>kHymPPId</family></name>
我尝试过使用 XDocument.ToString(),我尝试过使用带有 Formattign Indented 选项的 XmlTextWriter,甚至我在另一篇文章中找到的这个方法
//StringBuilder sb = new StringBuilder();
//XmlWriterSettings settings = new XmlWriterSettings();
//settings.Indent = true;
//settings.IndentChars = " ";
//settings.NewLineChars = "\r\n";
//settings.NewLineHandling = NewLineHandling.Replace;
//using (XmlWriter writer = XmlWriter.Create(sb, settings))
//{
// doc.Save(writer);
//}
似乎没有任何效果。
为什么修改这些节点会删除开头的格式?
我怎样才能在输出中防止或修复它?
编辑: 我发现具有文本节点的节点会弄乱节点的剩余格式。当我删除文本节点时,格式看起来应该是正确的缩进。但是对于文本节点,后代的整个分支被视为一个没有应用格式的长文本节点。
【问题讨论】: