XML入门的常见问题(三)
如何处理和加载含有外国字符和特殊字符的文档?
文档中的字符种类繁多,有时可能包含外国字符或特殊字符。例如,一个名为“箜”的乐器名称在文档中可能就会带有特定的外国字符。为了确保文档能够正确加载并,我们需要对这些特殊字符进行处理。
当文档中含有外国字符时,这些字符可能是 UTF-8 编码或者采用其他编码方式。为了确保能够正确加载 XML,我们需要确保这些外国字符前面添加了 escape 序列。例如,“箜”这个字符在 XML 中就需要以特定的方式进行编码。
除了外国字符,XML 中还有许多特殊字符是保留的,比如 &、<、>、" 和 ' 等。这些字符在 XML 中有特殊的含义,因此不能直接使用。如果想要在 XML 中使用这些字符,就需要使用所谓的“实体”来替换它们。例如,"&"就要写成"&"。
如果你在 Visual C++ 6.0 中想要使用 MSXML COM 组件,那么使用 import 指令是最简便的方式。通过这种方式,你可以轻松地定义所有 IXML 接口和接口 ID,并在你的应用程序中使用它们。
如果你的 XML 中包含了 HTML 实体,比如版权符号 ©,那么你需要通过 DTD 来定义这些实体。因为 XML 只有五个内置实体,其他的 HTML 实体需要用户自行定义。为了使用这些 HTML 实体,你需要关闭 XML 文档的 validateOnParse 属性。这样,即使文档中含有未定义的 HTML 实体,也能成功加载并。
在完成了DTD验证之后,为了让XML文档能够使用所有的HTML实体,我们必须在现有的DTD中包含作为参数实体的HTML实体。这些实体定义了一种简便的方式,让你可以在XML文档中使用HTML标签和特殊字符。想象一下,这就像是给你的XML文档注入了活力,让它能够更自如地展示各种内容。
那么,在元素内容中,我们该如何处理那些看似微不足道的空白字符呢?XML DOM提供了三种方式来访问元素文本内容,它们分别关注不同的方面。
首先是“nodeValue”属性。这个属性会返回TEXT、CDATA、COMMENT和PI节点上的原始文本内容,包括那些空白字符。对于ELEMENT节点和DOCUMENT本身,它会返回空值。这就好像是一个忠实的记录者,捕捉并保存了文档中的每一个细节。
接下来是“数据”属性,它与nodeValue相似,但更多地关注于特定子树中的文本连接。它会将多个TEXT和CDATA节点组合在一起,形成一个连贯的文本。
值得注意的是,这里的空白字符不仅仅是简单的空格,还包括新行和tab等。这些看似微小的细节,在XML文档中却有着不可忽视的作用。
还有一个重要的点是,“nodeValue”属性所返回的内容,是与文档如何加载和当前的xml:space范围无关的。也就是说,无论文档如何变化,这个属性都会坚守它记录的原始内容。
当文档加载时,如果preserveWhiteSpace设置为true,那么所有的空白字符都会被保留;如果设置为false,那么一些空白字符可能会被截断或合并。这里的“保留”意味着完全保留原始文本内容,“截断”则意味着删除前导和尾部空格,“半保留”则是保留重要的空白字符并规范化不重要的空白字符。
让我们看一个具体的例子。在这个例子中,“”和“\t”是不重要的空白字符,而文本内容中的空格则是重要的。在不同的状态下,“文本”属性会返回不同的结果。例如,在“保留”状态下,它会返回包含所有空白字符的文本;而在“半保留并截断”状态下,它会返回一个规范化了不重要的空白字符的文本。
在XML的世界里,实体是一种特殊的存在。它们作为DTD的一部分被加载并分析,并显示在DOCTYPE节点之下。实体的定义并不需要特定的xml:space范围。例如,我们可以定义一个名为“Jane”的实体。
当我们谈论到XML的实体时,我们必须理解其如何处理空白字符。假设preserveWhiteSpace设置为false(在DOCTYPE标记范围内),在分析实体时,不重要的空白字符会被忽略。这意味着实体不会拥有空白字符节点。树结构将呈现出一种特定的形式,如DOCTYPE下会有名为“Jane”的实体节点,以及一系列的元素节点和文本节点。值得注意的是,在这个结构里,DOM树不会包含任何WHITESPACE节点。这也意味着ENTITYREF节点的子节点也不会包含WHITESPACE节点,即使这个实体引用在xml:space="preserve"的范围内也是如此。
每一个在给定文档中引用的实体实例,通常都会有相同的树结构。如果实体必须绝对保留空白字符,那么它必须自己内部指定xml:space属性,或者文档的preserveWhiteSpace开关必须设置为true。
那么,我们如何处理属性中的空白字符呢?我们可以通过IXMLDOMAttribute接口来访问属性值。这个接口拥有nodeValue属性,它可以返回与原始文档中完全相同的属性内容(包括扩展的实体)。还有nodeTypedValue和text属性。其中,nodeTypedValue主要用于特定类型的值,而text属性与nodeValue相似,但会去除前后的空白字符。所有这些都是为了在“XML语言”规范中定义特定的行为属性类型,例如CDATA、ID、IDREF等。半规范化代表着将新行和tab字符转换为空格的处理方式,同时不会将多个空格退化为一个空格。“XML语言”规范为XML应用程序提供了丰富的行为定义和工具处理各种属性类型。
实体是XML中重要的组成部分,它们帮助我们管理和处理特定的数据内容。对于如何处理空白字符和属性值的规范化处理也是XML和应用中不可忽视的部分。通过理解这些概念和使用相关工具,我们可以更有效地处理和分析XML数据。上述内容是由Cambrian系统渲染出来的主体内容。
网络安全培训
- XML入门的常见问题(三)
- 详谈javascript中DOM的基本属性
- CodeIgniter使用phpcms模板引擎
- Angularjs实现多图片上传预览功能
- Windows7 64位安装最新版本MySQL服务器的图文教程
- 浅谈ASP.NET Core的几种托管方式
- JS实现带动画的回到顶部效果
- SQL中JOIN和UNION区别、用法及示例介绍
- Vue-resource实现ajax请求和跨域请求示例
- Bootstrap基本组件学习笔记之分页(12)
- 你可能不知道的JSON.stringify()详解
- JS+CSS实现实用的单击输入框弹出选择框的方法
- 微信小程序实现录音时的麦克风动画效果实例
- Bootstrap select实现下拉框多选效果
- nodejs根据ip数组在百度地图中进行定位
- 详解微信小程序开发之下拉刷新 上拉加载