XML入门的常见问题(三)

互联网 16-12-22
如何加载有外国和特殊字符的文档?

  文档可以包含外国字符,例如:

  其他字符是保留在 XML 中的,并且需要以不同的方式处理。下面的 XML:

  This & that  产生如下错误:  此处不允许有空格。  行 0000001: This & that  位置 0000012: ----------^

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

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

  或者可以将单引号转义为实体 &apos;

  上述两种方式都将通过 XML 对象模型中的 getAttribute 方法返回属性值 John's Stuff。同样,对于双引号,您可以使用实体  "。  也可以通过将文本放在 CDATA 节中来处理元素内容中的特殊字符。下面的内容是正确的:

  在本例子中,XML 对象模型将 CDATA 节点显示 xml 节点的子节点,它将返回字符串

  如何在 Visual Studio 6.0 C++ 中使用 MSXML COM 组件?

  在 Visual C++ 6.0 中使用 MSXML COM 组件的最简便方式是使用 #import 指令:

  如何在 XML 中使用 HTML 实体?

  下面的 XML 包含 HTML 实体:

  引用未定义的实体 'copy'。  行: 1, 位置:23, 错误码:0xC00CE002  Copyright ? 2000, ...  ----------------------^

  要使用 HTML 实体,需要用 DTD 定义它们。有关 DTD 的详细信息,请参阅 W3C XML 建议(英文)。要使用该 DTD,请将它直接包括在 DOCTYPE 标记中,如下所示:

  要加载它,需要关闭 IXMLDOMDocument 接口的 validateOnParse 属性。请尝试将它粘贴到“Validator 测试页”中,关闭 DTD 验证,然后单击“验证”。请注意文档将加载,并且版权字符将显示在 validator 页面的末尾的 DOM 树中。

  如果已经完成了 DTD 验证,那么必须将作为参数实体的 HTML 实体包括在现有的 DTD 中,如下所示:

  %HTMLENT;  %HTMLENT;

  在元素内容中如何处理空白字符?

  XML DOM 有三种访问元素文本内容的方式:

  属性 行为

  nodeValue 按照原始的 XML 源中指定的那样,返回 TEXT、CDATA、COMMENT 和 PI 节点上的原始文本内容(包括空白字符)。对于 ELEMENT 节点和 DOCUMENT 本身,则返回空值。

  数据 与 nodeValue 相同

  文本 重复连接指定子树中的多个 TEXT 和 CDATA 节点并返回组合结果。

  注意: 空白字符包括新行、tab 和空格。

  nodeValue 属性通常返回原始文档中的内容,与文档如何加载和当前 xml:space 范围无关。

  文本属性连接指定子树中的所有文本并扩展实体。这与文档如何加载、PReserveWhiteSpace 开关的当前状态和当前 xml:space 范围有关,请看如下所示:

preserveWhiteSpace=true preserveWhiteSpace=true preserveWhiteSpace=false preserveWhiteSpace=false

xml:space=preserve xml:space=default xml:space=preserve xml:space=default

保留 保留 保留 保留并截断

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 开关,那么文本属性将返回相应的不同值。

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

  "Jane Smith "

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

  实体是作为 DTD 的一部分加载和分析的,并且显示在 DOCTYPE 节点下。它们不一定要有任何 xml:space 范围。例如:

  Jane \n  \t\n  ">  ]>  &Jane;

  DOCTYPE foo  ENTITY: Jane  ELEMENT: employee  ELEMENT: name  TEXT: Jane   ELEMENT: title  TEXT>:Software Design Engineer  ELEMENT: foo  ATTRIBUTE: xml:space="preserve"  ENTITYREF: Jane

  给定文档中引用的每个 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入门的常见问题(三)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: xml
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:XML入门的常见问题(二)

相关资讯