查找嵌入式命名空间uri

时间:2009-12-14 17:50:54

标签: xml xpath

给出以下内容:
您将注意到,此xml示例中嵌入的是一个Organization节点,其自己的命名空间用xmlns =“”

声明

这是声明的,而不是使用前缀。 有没有办法找到使用xpath在xml文档中声明的所有命名空间?

我尝试了一些变体,遗憾的是xmlns不像文档的任何其他属性那样对待(出于显而易见的原因),我找不到使用xpath将它们删除的方法。

// @ *不包括它们。

我需要一份文档中所有xmlns属性的列表。

<rss version="2.0" xmlns:a10="http://www.w3.org/2005/Atom">
  <channel xmlns:media="http://search.yahoo.com/mrss">
    <title>Search Results Title</title>
    <link>http://acme.co.za/searchResults</link>
    <description>Search Results Descrption</description>
    <item>
      <guid isPermaLink="false">uuid:169d3229-3b99-4647-9791-492bbbf4c419/PGS0900.PDF</guid>
      <link>link</link>
      <title>Title</title>
      <description>This page...</description>
      <media:thumbnail url="..." width="100" height="100"></media:thumbnail>
      <Organisation xmlns="http://acme.co.za/MYNAMESPACE" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <Name>Volkswagen</Name>
        <Business>Kraft-durch-Freude-Wagen</Business>
        <Type>Public</Type>
        <RegistrationNumber>5908213224080</RegistrationNumber>
      </Organisation>
    </item>
  </channel>
</rss>

2 个答案:

答案 0 :(得分:1)

您应该可以执行//namespace:*

之类的操作

但是,假设这有效,它将按文档顺序为您提供一个命名空间节点列表,其中包含大量重复项。简单地通过DOM遍历文档,累积名称空间的集合(无欺骗)可能会更好。请注意,您需要检查属性和元素。

答案 1 :(得分:0)

正确的语法是 //命名空间URI()

它为您提供了文档中的所有命名空间。

此致 克雷格。