首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XInclude包含元素的命名空间

XInclude包含元素的命名空间
EN

Stack Overflow用户
提问于 2013-01-26 22:02:23
回答 1查看 440关注 0票数 2

考虑这两个XML文档:

a.xml

代码语言:javascript
复制
<a xmlns="foo" xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="b.xml" parse="xml" />
</a>

b.xml

代码语言:javascript
复制
<b>Hi Mom!</b>

<b> 元素在包含foo或没有命名空间之后,应该在哪个名称空间中?

使用诺科吉里加载第一个带有XInclude处理的文档会产生一个文本表示形式,这意味着<b>位于父命名空间中,但检查元素时声称<b>没有命名空间:

代码语言:javascript
复制
require 'nokogiri'

d = Nokogiri.XML(IO.read('a.xml'),&:xinclude)
puts d
#=> <?xml version="1.0"?>
#=> <a xmlns="foo" xmlns:xi="http://www.w3.org/2001/XInclude">
#=>     <b>Hi Mom!</b>
#=> </a>

p d.root.namespace
#=> #<Nokogiri::XML::Namespace:0x3fd40c517de8 href="foo">

p d.root.elements.first.namespace
#=> nil
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-26 22:21:30

在包含、foo或没有命名空间之后,<b>元素应该在哪个命名空间中?

没有命名空间。XInclude在信息集级别进行操作,并保留包含的内容的信息集属性。信息集规范显式地指出

与真实文档相对应的信息集在各种方面必然是一致的;例如,元素的范围内名称空间属性将与元素及其祖先的命名空间属性相一致。--这可能不是通过其他方法构造的信息集;在这种情况下,不会有与信息集相对应的XML,而序列化它将需要解决不一致的问题(例如,输出与范围内的命名空间相对应的命名空间声明)。

(我的粗体)- <b>元素不在名称空间中,但其作用域名称空间infoset属性不再与解析XInclude所产生的“虚拟”文档中的命名空间声明一致。

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

https://stackoverflow.com/questions/14542030

复制
相关文章

相似问题

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