• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
XML
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
XML 中的常见问题 (三)
软件发布 XML 中的常见问题 (三)
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 编程技术 >> XML教程 >> XML 中的常见问题 (三)

XML 中的常见问题 (三)

添加时间: 2006-3-4 7:08:07  作者: XML教程  阅读次数:55   来源: http://www.d9soft.com

       

  如何加载有外国和特殊字符的文档?

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


  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中的常见问题 (四) 下一篇文章: XML 中的常见问题 (二)

相关文章:

  • 微软回避关于Windows7的七个问题
  • 从“番茄花园”看软件正版化问题
  • 七招解决Vista的加速与优化问题
  • 服务器虚拟机管理需注意的四大问题
  • CSS解决浏览器的等宽空格问题

相关软件:

  • 高中数学问题处理系统 V1.2
  • DOS万能驱动合集 (含有常见所有驱动)
  • 常见木马扫描器 V1.0 Build 0913
  • 电脑常见问题与故障1000例 详细讲解电脑常见故障 PDF
  • 软件网络疑难问题与技巧(CHM)
  • PERL常见问题解答(HTML)

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • XML轻松学习手册(6)XML实例解析...
  • XSL简明教程(1)XSL入门
  • XSL简明教程(2)XSL转换
  • XSL简明教程(3)在客户端的实现
  • XSL简明教程(4)在服务器端的实现
  • XSL简明教程(5)XSL的索引
  • XSL简明教程(5)XSL的索引
  • XSL简明教程(6)XSL过滤和查询
  • XSL简明教程(7)XSL 的控制语句
  • XSL简明教程(7)XSL 的控制语句

XML教程阅读排行

  • XML轻松学习手册(6)XML实例解析...
  • XSL简明教程(1)XSL入门
  • 大话XML(1)XML是什么
  • XML轻松学习手册(2)XML快速入门
  • XML轻松学习手册(1)目录
  • XML轻松学习手册(3)XML概念
  • 大话XML(2)XML和HTML的比较1
  • XML轻松学习手册(5)XML语法
  • XSL简明教程(2)XSL转换
  • 大话XML(2)XML和HTML的比较4

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • VC++之List Box/Check List Box控...
  • 第二章 PowerBuilder 入门之创建新...
  • VC++ List Ctrl控件
  • 第一章 什么是PowerBuilder
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有