发新话题
打印

XML 中的常见问题 (三)

XML 中的常见问题 (三)

  如何加载有外国和特殊字符的文档?
  文档可以包含外国字符,例如:

  foreign characters (úóí?)

  例如 磲 的外国字符必须在前面加上 escape 序列。外国字符可以是 UTF-8 编码或用不同编码指定,如下所示:

  foreign characters (磲)

  现在可以正确加载 XML 了。
  其他字符是保留在 XML 中的,并且需要以不同的方式处理。下面的 XML:

  This

TOP

  如何在 Visual Studio 6.0 C   中使用 MSXML COM 组件?
  在 Visual C   6.0 中使用 MSXML COM 组件的最简便方式是使用 #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 节点并返回组合结果。
 XML 中的常见问题 (一) | XML 中的常见问题 (二)

TOP

  注意: 空白字符包括新行、tab 和空格。
  nodeValue 属性通常返回原始文档中的内容,与文档如何加载和当前 xml:space 范围无关。
  文本属性连接指定子树中的所有文本并扩展实体。这与文档如何加载、preserveWhiteSpace 开关的当前状态和当前 xml:space 范围有关,请看如下所示:
  preserveWhiteSpace = true when the document is loaded
preserveWhiteSpace=truepreserveWhiteSpace=truepreserveWhiteSpace=falsepreserveWhiteSpace=false
xml:space=preservexml:space=defaultxml:space=preservexml:space=default
保留保留保留保留并截断

  preserveWhiteSpace = false when the document is loaded
preserveWhiteSpace=truepreserveWhiteSpace=truepreserveWhiteSpace=falsepreserveWhiteSpace=false
xml:space=preservexml:space=defaultxml:space=preservexml:space=default
半保留半保留并截断半保留半保留并截断

  此处的保留表示和原始 XML 文档中完全相同的原始文本内容,截断意味着前导和尾部空格已经删除,半保留意味着保留了“重要的空白字符”并规范化了“不重要的空白字符”。重要的空白字符是文本内容内部的空白字符。不重要的空白字符是标记之间的空白字符,请看如下所示:

  \n
  \t    Jane\n
  \tSmith     \n

  在本示例中,红色是可以忽略的不重要的空白字符,而绿色是重要的空白字符,因为它是文本内容的一部分,因此有不可忽略的重要含义。所以在本例中,文本属性返回下列结果:
  状态 返回值
  保留 "\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 节点或“保留”节点的内容将得到连接,原因是它们不参与不重要的空白字符规范化。例如:

  \n
  \t Jane \n
  \t     Smith     ]>\n

  在这种情况下,CDATA 节点内部的空白字符不再与“不重要”空白字符“合并”,并且不会截断。因此“半保留并截断”情况将返回下列内容:
  "Jane      Smith     "
 XML 中的常见问题 (一) | XML 中的常见问题 (二)

TOP

  在此, 和 标记之间的不重要的空白字符将包括在内,与 CDATA 节点的内容无关。如果用下列内容代替 CDATA,那么将返回相同结果:
  Smith     
  实体是特殊的
  实体是作为 DTD 的一部分加载和分析的,并且显示在 DOCTYPE 节点下。它们不一定要有任何 xml:space 范围。例如:

  Jane \n
  \t\n
  ">
  ]>
  

TOP

发新话题