我正在尝试使用ReplaceWith()替换节点,但发现它导致格式错误(缺少新的行和缩进)。
之前有没有人遇到过这个问题?
代码段:
[Test]
public void Test()
{
XDocument document;
using (var reader = XmlReader.Create("C:\\test.xml"))
{
// *** Running this line results in new lines OMITTED ***
document = XDocument.Load(reader);
// *** Running this line results in proper formatting ***
//document = XDocument.Parse(XDocument.Load(reader).ToString());
}
var newNode = new XElement("Node", new XElement("SubNode"));
document.Root.Element("Node").ReplaceWith(newNode);
Console.Out.WriteLine("document = {0}", document);
}
重现步骤:
1)使用以下内容创建C:\ test.xml:
<Test>
<Node/>
<Test>
2)运行上面的代码片段。
这将导致某些XML格式不正确:
<Test>
<Node><SubNode /></Node>
</Test>
3)取消注释这一行:
document = XDocument.Parse(XDocument.Load(reader).ToString());
4)再次运行代码段。
结果将正确格式化:
<Test>
<Node>
<SubNode />
</Node>
</Test>
答案 0 :(得分:1)
虽然XElement / XDocument“很好地”在解析它时使用。(使用.Parse())隐式地格式化xml,但似乎没有一种方法来显式地打印其内容。这实际上是对.net框架的一个很好的补充。
您指定的黑客虽然效率不高,但却是一种快速的方法:
XDocument.Parse(XDocument.Load(reader).ToString());
答案 1 :(得分:0)
结果是有效的XML。换行符和缩进在XML中无关紧要。
如果你需要它打印漂亮,你可以在完成操作XML之后这样做。