请注意“半保留”将规范化不重要的空白字符,例如,新行和 tab 字符将退化为单个空格。如果更改 xml:space 属性和 preservewhitespace 开关,那么文本属性将返回相应的不同值。
cdata and xml:space="preserve" subtree boundaries在下面的例子中,cdata 节点或“保留”节点的内容将得到连接,原因是它们不参与不重要的空白字符规范化。例如:
\n \t jane \n \tsmith ]> \n
在这种情况下,cdata 节点内部的空白字符不再与“不重要”空白字符“合并”,并且不会截断。因此“半保留并截断”情况将返回下列内容:
"jane smith "
在此, 和
smith
实体是特殊的
实体是作为 dtd 的一部分加载和分析的,并且显示在 doctype 节点下。它们不一定要有任何 xml:space 范围。例如:
jane \n \t\n "> ]>&jane;
假定 preservewhitespace=false(在 doctype 标记范围内),在分析实体时不重要的空白字符丢失。实体将不会有空白字符节点。树将类似于:
doctype foo
entity: jane
element: employee
element: name
text: jane
element: title
text>:software design engineer
element: foo
attribute: xml:space="preserve"
entityref: jane
请注意,在 doctype 内部 entity 节点下显露的 dom 树不包含任何 whitespace 节点。这意味着 entityref 节点的子节点也没有 whitespace 节点,即使实体引用在 xml:space="preserve" 的范围内也是这样。
给定文档中引用的每个 entity 的实例通常都有相同的树。
如果实体必须绝对保留空白字符,那么它必须在自己内部指定自己的 xml:space 属性,或者文档 preservewhitespace 开关必须设置为 true。
有几种方式可以访问属性值。ixmldomattribute 接口有 nodevalue 属性,它等价于作为 microsoft 扩展的 nodevalue 和 text 属性。这些属性返回:
| 属性 | 返回的文本 |
| attrnode.nodevalue attrnode.value getattribute("name") |
返回和原始文档中完全相同的内容(和扩展的实体)。 |
| attrnode.nodetypedvalue | null |
| attrnode.text | 除了前导和尾部的空白字符已经截断之外,其他与 nodevalue 相同。 |
“xml 语言”规范为 xml 应用程序定义了下列行为:
属性类型
返回的文本
cdata
id、idref、idrefs、entity、entities、notation、枚举
半规范化
全规范化