我有一些数据要存储在XML文件中。 (它不一定是XML,但XML是一种不错的开放格式。)
数据由节点和子节点组成(没有深度限制),每个节点都可以有一些文本。
我的数据可能如下所示:
<?xml version="1.0" ?>
<nodes>
<node title="root">
<node title="child1">
Here is some text for child1.
</node>
<node title="child2">
Here is some text for child2.
</node>
<node title="child3">
Here is some text for child3.
</node>
Here is some text for root.
</node>
</nodes>
但是这种方法的问题在于我最终会得到很多原始文本中没有的空白。例如,我的根节点的文本有10个换行符和一堆制表符(或空格),以便很好地格式化子节点。
使用XML以这种方式存储数据的好方法是什么,但是保留原始文本,而不添加任何额外的空白字符?
注意:我假设我可以在没有换行符或缩进的情况下获得所有数据:
<?xml version="1.0" ?>
<nodes>
<node title="root"><node title="child1">Here is some text for child1.
</node><node title="child2">Here is some text for child2.
</node><node title="child3">Here is some text for child3.
</node>Here is some text for root.
</node>
</nodes>
我想这可以消除任何新的空白。但这是最好的方法吗?它尽可能地丑陋。一些XML查看器可能会通过添加空格来格式化标记。
答案 0 :(得分:1)
让我们分别考虑未混合和混合的内容:
如果元素之间没有文本可以混合,只需按照自己的意愿管理元素中的空白,并允许XML序列化器和编辑器管理元素之间的空白:
<?xml version="1.0" ?>
<nodes>
<node title="root">
<node title="child1">Here is some text for child1.</node>
<node title="child2">Here is some text for child2.</node>
<node title="child3">Here is some text for child3.</node>
</node>
</nodes>
这适用于面向数据的XML和面向文档的XML。 (OOXML是面向文档的XML的一个示例,不需要混合内容。)
当文本可以在元素之间混合时,根据数据的语义决定如何管理空格。例如,如果您的数据类似于HTML,则多个连续空间与单个空间没有任何区别,因此允许XML序列化程序和编辑器管理空白是正常的:
<?xml version="1.0" ?>
<nodes>
<node title="root">
<node title="child1">Here is some text for child1. </node>
<node title="child2">Here is some text for child2. </node>
<node title="child3">Here is some text for child3. </node>
Here is some text for root.
</node>
</nodes>
xml:space
如果XML的某些部分与嵌入式空白相关联,则可以通过向包含元素添加特殊xml:space="preserve"
属性来表示这一点:
在编辑XML文档时,使用“白色空间”通常很方便 (空格,制表符和空行)将标记设置为更大 可读性。这种白色空间通常不打算包含在内 在交付的文档版本中。另一方面, “重要的”白色空间应该在交付时保留 版本很常见,例如在诗歌和源代码中。
XML处理器必须始终传递文档中的所有字符 没有标记到应用程序。验证XML处理器 还必须告知应用程序这些字符中的哪一个 元素内容中出现的空白区域。
名为
xml:space
的特殊属性可以附加到元素 表示在该元素中应该是白色空间的意图 由应用程序保存。在有效文档中,这个属性就像 任何其他的,必须在使用时声明。声明时,必须是 作为枚举类型给出,其值为一个或两个"default"
和"preserve"
。
但是,您应谨慎使用xml:space="preserve"
。将它放在复杂XML格式(如OOXML)的根元素上可能会使consumers of your data justifiably unhappy。