展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > XML入门的常见问题(三)

XML入门的常见问题(三)

处理XML时,经常会遇到外国字符、特殊符号以及空白字符的麻烦。这篇文章将系统梳理这些常见问题,并提供MSXML环境下的实用解决方案。 如何加载包含外国字符和特殊字符的XML文档? XML文档可以包含外国字符,比如 úóí? 这类拉丁字母变体,或者像 磲 这样的Unicode字符。对于这些字符,需要

本文目录

    处理XML时,经常会遇到外国字符、特殊符号以及空白字符的麻烦。这篇文章将系统梳理这些常见问题,并提供MSXML环境下的实用解决方案。

    如何加载包含外国字符和特殊字符的XML文档?

    XML文档可以包含外国字符,比如 úóí? 这类拉丁字母变体,或者像 磲 这样的Unicode字符。对于这些字符,需要在它们前面加上转义序列(escape sequence)。外国字符可以用UTF-8编码,也可以用其他编码指定。只要处理得当,XML就能正确加载。

    不过,有些字符是XML语法保留的,需要特殊对待。比如下面这段XML:

    This & that

    会引发错误:此处不允许有空格。行 0000001: This & that 位置 0000012: ----------^。原因在于,& 是XML句法结构的一部分,如果它只是作为数据内容出现,就不能被直接解释为“&”符号。你需要用称为“实体”的特殊字符序列来替换它:

    This & that

    需要转义的五个内置实体如下:

    字符实体
    <<
    &&
    >>
    ""
    ''

    引号字符通常用作属性值的定界符,因此不能在属性值内部直接使用。例如, 会报错,因为单引号既用作定界符,又出现在内容中。解决办法有两种:将属性定界符换成双引号,或者将单引号转义为 '。两种方式都能通过XML对象模型的 getAttribute 方法返回 John's Stuff。双引号同理,可以用 " 转义。

    对于元素内容中的特殊字符,也可以使用CDATA节来处理。例如:

    XML对象模型会将CDATA节点显示为xml节点的子节点,nodeValue 返回字符串 This & that is just "text" content.。

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

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

    #import "msxml.dll" named_guids no_namespace

    这会定义所有IXML*接口和接口ID,从而可以在应用程序中直接使用。也可以从INETSDK获取MSXML类型库和头文件,以及包含类IID的uuid.lib。

    如何在XML中使用HTML实体?

    下面的XML包含HTML实体:

    Copyright © 2000, Microsoft Inc, All rights reserved.

    加载时会报错:引用未定义的实体 'copy'。 这是因为XML只内置了五个实体(<, >, &, ", ')。要使用HTML实体,需要用DTD来定义它们。将DTD直接包含在DOCTYPE标记中,如下所示:

    
    ]>
    Copyright © 2000, Microsoft Inc, All rights reserved.

    加载时需要关闭 IXMLDOMDocument 接口的 validateOnParse 属性。如果已经完成了DTD验证,那么必须将HTML实体作为参数实体包括在现有的DTD中,例如:

    %HTMLENT;

    这将定义所有HTML实体,以便在XML文档中使用。

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

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

    属性行为
    nodeValue按照原始XML源中指定的那样,返回TEXT、CDATA、COMMENT和PI节点上的原始文本内容(包括空白字符)。对于ELEMENT节点和DOCUMENT本身,返回空值。
    data与nodeValue相同。
    text重复连接指定子树中的多个TEXT和CDATA节点,并返回组合结果。

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

    nodeValue 属性通常返回原始文档中的内容,与文档如何加载和当前 xml:space 范围无关。而 text 属性连接指定子树中的所有文本并扩展实体,这与文档加载时 preserveWhiteSpace 开关的状态和当前 xml:space 范围有关。下表展示了不同组合下的行为:

    preserveWhiteSpace = true 时加载文档

    xml:space=preservexml:space=defaultxml:space=preservexml:space=default
    保留保留保留保留并截断

    preserveWhiteSpace = false 时加载文档

    xml:space=preservexml:space=defaultxml:space=preservexml:space=default
    半保留半保留并截断半保留半保留并截断

    这里的“保留”表示与原始XML文档完全相同的原始文本内容;“截断”意味着删除前导和尾部空格;“半保留”意味着保留“重要的空白字符”并规范化“不重要的空白字符”。重要的空白字符是文本内容内部的空白字符,不重要的空白字符是标记之间的空白字符。例如:

    
         Jane
      Smith   
    

    红色(\n、\t、空格)是不重要的空白字符,绿色( Jane 和 Smith 内部的空格)是重要的空白字符。不同状态下 text 属性返回的结果如下:

    状态返回值
    保留"\n\t Jane\n\tSmith \n"
    保留并截断"Jane\n\tSmith"
    半保留" Jane Smith "
    半保留并截断"Jane Smith"

    注意“半保留”会将不重要的空白字符规范化,例如新行和制表符会退化为单个空格。

    CDATA 和 xml:space="preserve" 子树边界

    CDATA节点或“保留”节点的内容会直接连接,因为它们不参与不重要的空白字符规范化。例如:

    
      
    

    在“半保留并截断”情况下,返回 "Jane Smith "。注意CDATA内部的空白字符不会被“合并”,也不会被截断。如果用实体引用代替CDATA,结果相同。

    实体是特殊的

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

    Jane Software Design Engineer">
    ]>
    &Jane;

    假定 preserveWhiteSpace=false,在分析实体时不重要的空白字符会丢失,实体内部不会有空白节点。这意味着即使实体引用位于 xml:space="preserve" 范围内,其子节点也没有空白节点。如果实体必须保留空白字符,要么在实体内部自行指定 xml:space 属性,要么将文档的 preserveWhiteSpace 开关设置为 true。

    如何处理属性中的空白字符?

    访问属性值有几种方式。IXMLDOMAttribute 接口有 nodeValue 属性,它等价于作为Microsoft扩展的 nodeValue 和 text 属性。不同属性返回的文本如下:

    属性/方法返回的文本
    attrNode.nodeValue
    attrNode.value
    getAttribute("name")
    与原始文档中完全相同(扩展了实体)。
    attrNode.nodeTypedValueNull
    attrNode.text除了前导和尾部空白字符已截断外,其他与 nodeValue 相同。

    XML规范为应用程序定义了以下行为:

    属性类型返回的文本
    CDATA半规范化(将新行和制表符转换为空格,但多个空格不会退化为一个空格)
    ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, 枚举全规范化

    至此,XML中外国字符、特殊字符、实体以及空白字符的处理方式就清晰了。掌握这些机制,就能避免大多数解析错误,让XML文档在各种环境下正确加载。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    下一篇: UDDI FAQs
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。