•   欢迎来到21NN网.
  •   请记住本站网址www.21nn.cn

XML入门的常见问题(三)【XML教程】,XML

摘要: 怎样加载有外国和特别字符的文档?  文档能够包含外国字符,比方:  foreigncharacters(úóí?)  比方磲的外国字符必需在前面加上escape序列。...
怎样加载有外国和特别字符的文档?

  文档能够包含外国字符,比方:


  foreign characters (úóí?)


  比方 磲 的外国字符必需在前面加上 escape 序列。外国字符能够是 UTF-8 编码或用差别编码指定,以下所示:


  foreign characters (磲)


  如今能够准确加载 xml 了。

  其他字符是保存在 XML 中的,而且须要以差别的体式格局处置惩罚。下面的 XML:


  This & that
  发生以下毛病:
  此处不允许有空格。
  行 0000001: This & that
  位置 0000012: ----------^


  此处 & 是 XML 句法构造的一部分,假如它仅仅放在 XML 数据源内部,那末不能解释为 &。您须要替代称为“实体”的特别字符序列。

  This & that
  下面的字符须要响应的实体:


  < <
  & &
  > >
  " "
  ' &apos;


  引号字符被用作标记中属性值的定界符,因而一般不能在属性值的内部运用。比方,下面的内容将返回毛病:

  此处的单引号既用作属性定界符,又在属性值自身中。为了改正这个题目,能够将属性定界符换成双引号:

  或许能够将单引号转义为实体 &apos;

  上述两种体式格局都将经由过程 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 组件的最轻便体式格局是运用 #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


  在本示例中,赤色是能够疏忽的不主要的空缺字符,而绿色是主要的空缺字符,由于它是文本内容的一部分,因而有不可疏忽的主要寄义。所以在本例中,文本属性返回以下效果:

  状况 返回值
  保存 "\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 "

  在此, 和 标记之间的不主要的空缺字符将包含在内,与 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 扩大的 nodeValue 和 text 属性。这些属性返回: 属性 返回的文本


  attrNode.nodeValue
  attrNode.value
  getAttribute("name") 返回和原始文档中完全雷同的内容(和扩大的实体)。
  attrNode.nodeTypedValue Null
  attrNode.text 除了前导和尾部的空缺字符已截断以外,其他与 nodeValue 雷同。


  “XML 言语”范例为 XML 应用程序定义了以下行动: 属性范例 返回的文本
  CDATA ID、IDREF、IDREFS、ENTITY、ENTITIES、NOTATION、罗列

  半范例化 全范例化

  在此半范例化代表将新行和 tab 字符转换为空格,然则多个空格不会退化为一个空格。

以上就是XML入门的常见题目(三)的内容,更多相关内容请关注ki4网(www.ki4.cn)!

分享到:

发表评论

评论列表

还没有评论,快来说点什么吧~

公众号二维码

微信公众号