【问题标题】:How to determine all namespaces in an XML document如何确定 XML 文档中的所有名称空间
【发布时间】:2012-02-13 15:55:45
【问题描述】:

我正在尝试对具有多个命名空间的文档使用 XPath 查询,并且需要定义一个 NamespaceContext。检索我能想到的所有命名空间的唯一方法是遍历所有节点和属性并显式收集它们的命名空间 URI 和前缀。这似乎非常低效,我怀疑这是最佳做法。

应该怎么做?
谢谢你

【问题讨论】:

  • 为什么需要检索所有命名空间 URI?构造查询时,最好事先了解命名空间(与实际使用的前缀无关);否则查询有什么用?
  • @forty-2 我想模拟内部 XPathAPI,它似乎透明地处理命名空间。所以我构建了一个 Util 来消除传递命名空间数据的需要,但不确定最好的方法。
  • 那是哪个内部 XPathApi?
  • 只有一个 AFAIK : docjar.com/docs/api/com/sun/org/apache/xpath/internal/… 但这似乎有点过时了?

标签: java xml dom xpath


【解决方案1】:

因为命名空间既可以在 XML 文档的标题中定义,也可以在元素本身中定义,所以您是正确的;如果您需要在文档中使用每个命名空间,则需要处理整个文档(如果您希望 100% 完成,则包括所有导入)。

如果您希望人们能够像使用 XPath 式查询的数据库一样查询您的文档,您可能希望将文档加载到内存中的表示形式中,这样无论如何都可以快速查询。

鉴于无论如何您都必须将整个内容处理到内存中,这将是您解析所有命名空间的机会。

注意:我忽略了“为什么”您需要所有命名空间,我只是假设您需要它们,在这种情况下,您处理整个文档的假设是正确的。

【讨论】:

  • 谢谢。面对原因,我不太确定我是否需要它们——我认为这就是我必须这样做的方式。但我会检查一下,如果没有命名空间意识,我能取得什么结果。如果我毕竟不需要它们 - 很好摆脱。
猜你喜欢
  • 2010-10-05
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 2010-10-22
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多