当使用XmlDocument.Save(TextWriter)漂亮打印混合内容节点时,.NET XmlDocument有一个有趣的行为.
行为可以概括为“一旦漂亮的打印机遇到文本节点,它就会禁用当前子树的其余部分的缩进和自动换行”.
这是一个例子(http://ideone.com/b1WxD7):
<?xml version='1.0'?> <root><test><child1/><child2/>foo<child3><child4/></child3></test></root>
非常印刷
<?xml version="1.0"?> <root> <test> <child1 /> <child2 />foo<child3><child4 /></child3></test> </root>
这种行为似乎不正确也不直观.为什么XmlDocument会那样工作?
这种行为是不幸的,但我认为可以通过XmlTextWriter的
Formatting.Indented选项的描述来解释(这是XmlDocument.Save在这里使用的):
原文链接:https://www.f2er.com/xml/452483.htmlCauses child elements to be indented according to the 07001 and 07002 settings.
This option indents element content only; mixed content is not affected.
此选项的目的是保留XML的格式
<p>Here is some <b>bold</b> text.</p>
并没有重新格式化为
<p> Here is some <b> bold </b> text. </p>
但是有一个问题:XmlTextWriter如何知道元素包含混合内容?因为XmlTextWriter是non-cached,forward-only编写器,所以答案是它直到它实际遇到字符数据.此时,它切换到“混合内容”模式并禁止格式化.不幸的是,撤消已经写入底层流的子节点的格式化为时已晚.