如何确定XML文档中的所有名称空间

问题描述:

我试图在具有多个名称空间的文档上使用XPath查询,并且需要定义一个NamespaceContext。检索所有可以想到的名称空间的唯一方法是遍历所有节点和属性,并显式地收集它们的名称空间URI和前缀。这看起来效率很低,我怀疑这是最好的做法。如何确定XML文档中的所有名称空间

应该怎么做?
谢谢

+0

为什么您需要检索所有名称空间URI?在构建查询时,您最好事先知道名称空间(并且使用的实际前缀是不相关的);否则查询有什么用处? – 2012-02-13 16:01:59

+0

@四十二我想这样做模拟内部XPathAPI,似乎透明地处理命名空间。所以我构建了一个Util来消除传递名称空间数据的需要,但我不确定最佳方法。 – kostja 2012-02-13 16:07:15

+0

哪个内部XPathApi是? – 2012-02-13 16:14:15

由于名称空间既可以在XML文档的头文件中定义,也可以在元素本身中定义,您是正确的;如果您需要文档中使用的EVERY命名空间,则需要处理整个文档(如果想要100%完整地包括所有导入)。

如果您希望人们能够像使用XPath-esque查询的数据库一样查询您的文档,则可能需要将文档加载到可快速查询的内存中表示中。

鉴于您必须将整个事件处理成内存,那将是您解析所有命名空间的机会。

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

+0

谢谢。面对这些问题,我不太确定我是否需要他们 - 我认为这是我必须这样做的。但是我会检查一下,如果没有名称空间感知,我可以获得什么结果。如果我毕竟不需要它们的话 - 很好的解决方案。 – kostja 2012-02-13 19:02:46