xmlns格式混乱

时间:2012-10-09 06:29:08

标签: xml xml-parsing xml-namespaces

<linkbase xsi:schemaLocation="http://www.w3.org/1998/linkbase http://www.xbrl.org/2003/schema.xml" xmlns="http://www.noprefix.org/2003/linkbase" xmlns:xlink="http://www.w3.org/2005/xlink" xmlns:xsi="http://www.w3.org/1999/XMLSchema">
  <roleRef roleURI="http://www.greenserve.com/role/Commitgencies" xlink:href="Commitmentsngencies" xlink:type="simple" />
  </linkbase>

在此xml中,有一个xmlns属性,后面没有:和前缀名称。

xmlns="http://www.noprefix.org/2003/linkbase"

但是其他人在xmlns之后有一个冒号和前缀。因此,当我尝试解析此xml以获取带有“descendants”函数的roleref标记时,它不会显示任何内容。但是如果我在xmlns之后添加:和前缀,那么它可以正确解析。为什么它会像任何人解释一样?感谢。

1 个答案:

答案 0 :(得分:1)

如果您的xmlns属性没有冒号和前缀,则这是整个文档的默认命名空间...因此所有未加前缀的元素都将位于该默认命名空间中。但是,这与没有命名空间不同。请记住,命名空间实际上是URI,而不是前缀......前缀只是引用它的快捷方式。所以如果你有一个像这样的xml文件:

<xml xmlns="http://example.org" xmlns:ex="http://example2.org">
<element1/>
<element2/>
<ex:element3>
</xml>

没有名称空间前缀的元素不能仅由元素名称来处理,因为它们仍在名称空间http://example.org中。

现在,关于如何解析它......这一切都取决于你的工具。如果是XSLT,则在XSLT文件中,您可以为该命名空间提供临时前缀,以便解决这些元素。每种编程语言中的每个库都可能有不同的方式(仅作为众多示例中的一个,python中的lxml将解决默认的命名空间元素,如:{http://example.org} element1)。您将不得不引用您正在使用的任何内容来解析如何处理默认命名空间中的元素的帮助。