加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

.net – XmlDocument混合内容漂亮打印行为的基本原理是什么?

发布时间:2020-12-16 05:33:30 所属栏目:百科 来源:网络整理
导读:当使用XmlDocument.Save(TextWriter)漂亮打印混合内容节点时,.NET XmlDocument有一个有趣的行为. 行为可以概括为“一旦漂亮的打印机遇到文本节点,它就会禁用当前子树的其余部分的缩进和自动换行”. 这是一个例子(http://ideone.com/b1WxD7): ?xml version='
当使用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在这里使用的):

Causes 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编写器,所以答案是它直到它实际遇到字符数据.此时,它切换到“混合内容”模式并禁止格式化.不幸的是,撤消已经写入底层流的子节点的格式化为时已晚.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读