XML 中的常见问题[7]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 angelgavin 的 blog

请注意“半保留”将规范化不重要的空白字符,例如,新行和 tab 字符将退化为单个空格。如果更改 xml:space 属性和 preservewhitespace 开关,那么文本属性将返回相应的不同值。

cdata and xml:space="preserve" subtree boundaries

在下面的例子中,cdata 节点或“保留”节点的内容将得到连接,原因是它们不参与不重要的空白字符规范化。例如:

\n
\t jane \n
\t     smith     ]>\n

在这种情况下,cdata 节点内部的空白字符不再与“不重要”空白字符“合并”,并且不会截断。因此“半保留并截断”情况将返回下列内容:

"jane      smith     "

在此, 和 标记之间的不重要的空白字符将包括在内,与 cdata 节点的内容无关。如果用下列内容代替 cdata,那么将返回相同结果:

     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 扩展的 nodevaluetext 属性。这些属性返回:

属性 返回的文本
attrnode.nodevalue
attrnode.value
getattribute("name")
返回和原始文档中完全相同的内容(和扩展的实体)。
attrnode.nodetypedvalue null
attrnode.text 除了前导和尾部的空白字符已经截断之外,其他与 nodevalue 相同。

“xml 语言”规范为 xml 应用程序定义了下列行为:

属性类型 返回的文本
cdata id、idref、idrefs、entity、entities、notation、枚举
半规范化 全规范化

本文关键:XML 中的常见问题
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top