考虑这两个XML文档:
a.xml
<a xmlns="foo" xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="b.xml" parse="xml" />
</a>b.xml
<b>Hi Mom!</b><b> 元素在包含、foo或没有命名空间之后,应该在哪个名称空间中?
使用诺科吉里加载第一个带有XInclude处理的文档会产生一个文本表示形式,这意味着<b>位于父命名空间中,但检查元素时声称<b>没有命名空间:
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发布于 2013-01-26 22:21:30
在包含、foo或没有命名空间之后,
<b>元素应该在哪个命名空间中?
没有命名空间。XInclude在信息集级别进行操作,并保留包含的内容的信息集属性。信息集规范显式地指出
与真实文档相对应的信息集在各种方面必然是一致的;例如,元素的范围内名称空间属性将与元素及其祖先的命名空间属性相一致。--这可能不是通过其他方法构造的信息集;在这种情况下,不会有与信息集相对应的XML,而序列化它将需要解决不一致的问题(例如,输出与范围内的命名空间相对应的命名空间声明)。
(我的粗体)- <b>元素不在名称空间中,但其作用域名称空间infoset属性不再与解析XInclude所产生的“虚拟”文档中的命名空间声明一致。
https://stackoverflow.com/questions/14542030
复制相似问题