当前位置:首页 > 日记 > 正文

XML入门三常见问题

XML入门三常见问题

作者:AngelGavin  出处:CSDN


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


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



   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 字符转换为空格,但是多个空格不会退化为一个空格。


相关文章

对电话骚扰引发的极端事件进行立法

对电话骚扰引发的极端事件进行立法

事件,刻不容缓,电话,电脑软件,日前,新加坡国会通过个人信息保护法案,禁止向个人发促销短信,违法者,一条垃圾短信将可能面临最高1万新元(约合人民币5.14万元)罚款。新加坡此举专门针对日益猖獗的电话和短信促销发起。与新加坡相比,中国的促销短信…

大陆有多少人感染了一条小溪

大陆有多少人感染了一条小溪

小溪,大陆,有多少人,电脑软件, &ldquo;目前我国甲型H1N1流感防控已经进入关键时期。各地卫生部门对疫情防控工作的艰巨性和复杂性要有一个清醒的认识,要把甲型H1N1流感防控工作作为今冬明春卫生工作的重中之重。&;卫生部部长陈竺今天在全国…

Opera将在高1亿5000万美元的价格购

Opera将在高1亿5000万美元的价格购

购买,天火,将在,价格,电脑软件,2月16日消息,据国外媒体报道,挪威浏览器厂商Opera Software周五宣布,它将以最高1.5亿美元的价格收购竞争对手Skyfire Labs。Skyfire位于美国加州山景市,它的浏览器软件可以帮助运营商发布针对移动设备优化的视频…

iTunes2004年度销售额比苹果高出12

iTunes2004年度销售额比苹果高出12

美元,年度,高出,销售额,电脑软件,苹果一直低调到iTunes,说iTunes的操作只维持了利润和损失的平衡。 今年四月,苹果iTunes在线商店将有10年的历史,经过10年的发展,iTunes的年收入已经达到120亿美元。 Asymco的分析师Horace Dediu(Horace Dediu)…

一套技能加快DHTML

一套技能加快DHTML

技能,电脑软件,DHTML,动态HTML(DHTML)在微软Internet Explorer 4 为使Web作者和开发人员使用一种新的编程模型而引入的。 这个强大的特性用于提供动态内容、样式和位置,使Web用户能够 经验丰富的交互功能,DHTML的灵活性使得它可以有很多方法来…

PPTVcohesionandreInnovation:real

PPTVcohesionandreInnovation:real

电脑软件,PPTVcohesionandreInnovation,realizingbidirectionaloutputofPCmobileterminal,自2011以来,移动互联网电子商务领域的逐渐从手中接棒,互联网技术的发展,引领用户进入信息爆炸的时代,互联网视频技术的下一个重要节点是无缝对接的多scr…

风暴,黑马和黑马,覆盖整个行业第二。

风暴,黑马和黑马,覆盖整个行业第二。

黑马,行业,覆盖,风暴,电脑软件,7月24日,暴风影音在京召开&ldquo;老二宣言&;新闻发布会,对外宣布暴风影音的日均覆盖量连续一个多月排名全行业第二。根据艾瑞IUT数据统计,暴风影音的日均覆盖数达到每日3113.2多万人,这个排名已连续一个多月仅次…

提高工作效率win7win7的多窗口显示

提高工作效率win7win7的多窗口显示

显示,多窗口,排列,提高工作效率,技术,Win7是目前一个很好的系统。小win7旗舰版主题桌面壁纸提取到Win7安装win7无数优化技术。Win7的实用技巧系列,用最简单的语言,告诉你如何优化你的Windows7和让你的win7系统运行速度更快,更流畅。 Win7的实…

火狐浏览器已经有8年历史了。

火狐浏览器已经有8年历史了。

火狐浏览器,年历,电脑软件,Mozilla Firefox Firefox浏览器是由Mozilla基金会推出的开源桌面Web浏览器,它使用壁虎内核支持Windows、Mac和Linux,其前身是著名的Netscape Netscape浏览器。 2004年9月11日,Mozilla正式发布了Firefox 1,而Firefox浏…

Windows7轻松使用三个快捷方式

Windows7轻松使用三个快捷方式

快捷方式,轻松,电脑软件,今天带大家复习三个好用的Windows快捷键:Alt 空格,在鼠标失灵的情况下,移动当前屏幕上的窗口Ctrl Shift 回车,以治理员身份运行程序Ctrl Shift N,新建文件夹Alt 空格 这个组合键的作用是在当前窗口的左上角弹出经典的窗…

2010虎年短信频道(3)

2010虎年短信频道(3)

频道,虎年,短信,电脑软件,2010来了,想找些虎年的祝福送给朋友和家人,本站让你不在为这些祝福而烦心! 21、晨曦出现的第一缕阳光是我对您的深深祝福,夕阳收起的最后一抹嫣红是我对您的忠心问候。在新年来临之际,送上我真挚祝福:虎年快乐! 22、…

Win7文件夹个性化Win7一键同步文件

Win7文件夹个性化Win7一键同步文件

视图,同步,一键,电脑软件,Windows7可以为每个文件夹设置个性化的视图设置。它可以根据个人喜好和实际需要改变文件或文件夹图标的大小,或者在列表、平铺等中显示文件或文件夹。但是如果您对N文件夹视图有不同的风格设置,您希望所有文件夹使用…