如何加载有外国和特别字符的文档?
文档可以包含外国字符,例如:
foreign characters (úóí?)
例如 ?磲 的外国字符必需在前面加上 escape 序列。外国字符可以是 UTF-8 编码或用不同编码指定,如下所示:
foreign characters (?磲)
现在可以准确加载 XML 了。
其他字符是保留在 XML 中的,并且需要以不同的方法处理。下面的 XML:
This & that
产生如下错误:
此处不答应有空格。
行 0000001: This & that
地位 0000012: ----------^
此处 & 是 XML 句法结构的一部分,假如它仅仅放在 XML 数据源内部,那么不能说明为 &。您需要调换称为“实体”的特别字符序列。
This & that
下面的字符需要相应的实体:
以下为引用的内容:
<<
& &
> >
" "
' '
引号字符被用作标记中属性值的定界符,因此通常不能在属性值的内部应用。例如,下面的内容将返回错误:
此处的单引号既用作属性定界符,又在属性值自身中。为了改正这个标题,可以将属性定界符换成双引号:
或者可以将单引号转义为实体 '
上述两种方法都将通过 XML 对象模型中的 getAttribute 方法返回属性值 John's Stuff。同样,对于双引号,您可以应用实体"。
也可以通过将文本放在 CDATA 节中来处理元素内容中的特别字符。下面的内容是准确的:
在本例子中,XML 对象模型将 CDATA 节点显示 xml 节点的子节点,它将返回字符串
This & that is just "text" content.
作为 nodeValue。
如何在 Visual Studio 6.0 C 中应用 MSXML COM 组件?
在 Visual C 6.0 中应用 MSXML COM 组件M的最简便方法是应用 #import 指令:
#import "msxml.dll" named_guids no_namespace#import "msxml.dll" named_guids no_namespace
它定义了所有 IXML* 接口和接口 ID,从而可以在利用程序中应用它们了。也可以从 INETSDK 获取 MSXML 类型库和头文件(英文),以及包含类 IIDs 的 uuid.lib。
如何在 XML 中应用 HTML 实体?
下面的 XML 包含 HTML 实体:
Copyright ? 2000, Microsoft Inc, All rights reserved.
它产生下列错误:
引用未定义的实体 'copy'。
行: 1, 地位:23, 错误码:0xC00CE002
Copyright ? 2000, ...
这是由于 XML 只有五个内置实体。关于内置实体的具体信息,请参阅如何加载有外国和特别字符的文档?
要应用 HTML 实体,需要用 DTD 定义它们。有关 DTD 的具体信息,请参阅 W3C XML 建议(英文)。要应用该 DTD,请将它直接包含在 DOCTYPE 标记中,如下所示:
Copyright ? 2000, Microsoft Inc, All rights reserved.
要加载它,需要封闭 IXMLDOMDocument 接口的 validateOnParse 属性。请尝试将它粘贴到“Validator 测试页”中,封闭 DTD 验证,然后单击“验证”。请留心文档将加载,并且版权字符将显示在 validator 页面的末尾的 DOM 树中。
假如已经完成了 DTD 验证,那么必需将作为参数实体的 HTML 实体包含在现有的 DTD 中,如下所示:
%HTMLENT;
%HTMLENT;
它将定义所有 HTML 实体,以便在 XML 文档中应用它们。
在元素内容中如何处理空缺字符?
XML DOM 有三种拜访元素文本内容的方法:
属性 行动
nodeValue 按照原始的 XML 源中指定的那样,返回 TEXT、CDATA、COMMENT 和 PI 节点上的原始文本内容(包含空缺字符)。对于 ELEMENT 节点和 DOCUMENT 本身,则返回空值。
数据与nodeValue雷同
文本重复连接指定子树中的多个 TEXT 和 CDATA 节点并返回组合成果。
留心:空缺字符包含新行、tab 和空格。
nodeValue 属性通常返回原始文档中的内容,与文档如何加载和当前 xml:space 范畴无关。
文本属性连接指定子树中的所有文本并扩大实体。这与文档如何加载、preserveWhiteSpace 开关确当前状态和当前 xml:space 范畴有关,请看如下所示:
以下为引用的内容:
preserveWhiteSpace = true when the document is loaded
preserveWhiteSpace=true preserveWhiteSpace=true preserveWhiteSpace=false preserveWhiteSpace=false
xml:space=preserve xml:space=default xml:space=preserve xml:space=default
保留 保留 保留 保留并截断
preserveWhiteSpace = false when the document is loaded
preserveWhiteSpace=true preserveWhiteSpace=true preserveWhiteSpace=false preserveWhiteSpace=false
xml:space=preserve xml:space=default xml:space=preserve xml:space=default
半保留 半保留并截断 半保留 半保留并截断
此处的保留表现和原始 XML 文档中完整雷同的原始文本内容,截断意味着前导和尾部空格已经删除,半保留心味着保留了“重要的空缺字符”并规范化了“不重要的空缺字符”。重要的空缺字符是文本内容内部的空缺字符。不重要的空缺字符是标记之间的空缺字符,请看如下所示:
以下为引用的内容:
在本示例中,红色是可以疏忽的不重要的空缺字符,而绿色是重要的空缺字符,由于它是文本内容的一部分,因此有不可疏忽的重要含义。所以在本例中,文本属性返回下列成果:
状态 返回值
保留 "\n\t Jane\n\tSmith \n"
保留并截断 "Jane\n\tSmith"
半保留 " Jane Smith "
半保留并截断 "Jane Smith"
请留心“半保留”将规范化不重要的空缺字符,例如,新行和 tab 字符将退化为单个空格。假如更改 xml:space 属性和 preserveWhiteSpace 开关,那么文本属性将返回相应的不同值。
CDATA and xml:space="preserve" subtree boundaries
在下面的例子中,CDATA 节点或“保留”节点的内容将得到连接,原因是它们不参与不重要的空缺字符规范化。例如:
以下为引用的内容:
在这种情况下,CDATA 节点内部的空缺字符不再与“不重要”空缺字符“合并”,并且不会截断。因此“半保留并截断”情况将返回下列内容:
"Jane Smith"
在此,标记之间的不重要的空缺字符将包含在内,与 CDATA 节点的内容无关。假如用下列内容代替 CDATA,那么将返回雷同成果:
Smith
实体是特别的
实体是作为 DTD 的一部分加载和分析的,并且显示在 DOCTYPE 节点下。它们不必定要有任何 xml:space 范畴。例如:
以下为引用的内容:
假定 preserveWhiteSpace=false(在 DOCTYPE 标记范畴内),在分析实体时不重要的空缺字符丧失。实体将不会有空缺字符节点。树将类似于: