首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么静态解析XML QNames要比动态解析XML QNames好?

为什么静态解析XML QNames要比动态解析XML QNames好?
EN

Stack Overflow用户
提问于 2016-04-13 16:19:09
回答 1查看 86关注 0票数 1

QName是一个名称空间限定的名称.下面是包含两个QNames的XML

代码语言:javascript
复制
<ac:aircraft xmlns:ac="http://www.aircraft.org">
    <ac:altitude>12,000 feet</ac:altitude>
</ac:aircraft>

两个缩写的QNames是:

代码语言:javascript
复制
ac:aircraft
ac:altitude

扩展的QNames是:

代码语言:javascript
复制
{http://www.aircraft.org}aircraft
{http://www.aircraft.org}altitude

XML解析器知道将短名称(缩写名称)转换为长名称(扩展名称)的规则。

名称的缩写形式是静态的--在解析时--可解析为长名称。

QNames也可以用于数据。在下面的XML中,<log>元素的值是QName

代码语言:javascript
复制
<network-traffic xmlns:network="http://www.network-traffic.org">
      <log>network:client-error</log>
</network-traffic>

XML解析器只对标记进行操作,而不对数据进行操作。因此,XML解析器不会将短名称转换为长名称。从短名称到长名称的映射必须由更高级别的应用程序完成,例如XSLT处理器或XML验证器。换句话说,短名到长名的解析必须是动态的,而不是静态的。

问题:为什么静态地将短名解析为长名更好呢?动态地将短名称解析为长名称的缺点是什么?您能否提供一个具体的示例,说明由于必须动态地将短名称解析为长名称而产生的问题?QNames静态分析的实际好处是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-04-15 15:59:47

我认为迈克尔的观点是,名称空间前缀应该被看作是词汇上的方便。真正的限定名是(名称空间,名称)对,而不是(前缀,名称)对。一个名称空间可以使用几个不同的前缀来表示,甚至在同一个文档中也是如此。

区别往往并不重要。如果名称空间绑定可用,那么将前缀转换为名称空间非常简单。然而,一些开发人员变得懒惰,编写依赖于特定命名空间前缀的代码。这是一种脆弱的策略,因为如果XML信息集中的一部分被复制到其他地方,那么命名空间绑定的层次结构可能会改变,这些前缀的含义也会发生变化。为了防止这种情况,处理XML信息集的应用程序不应该提供直接访问前缀的API(除非为了操作前缀到命名空间绑定的目的)。相反,信息集应该包含每个节点的完整命名空间。如果您曾经在程序中调用过XPath处理器,那么您可能遇到了这个问题。XPath具有前缀感知能力,在执行XPath表达式之前,通常需要为XPath处理器设置一个“命名空间上下文”对象。否则,XPath表达式中的前缀可能会被错误地解释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36604202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档