当前位置: 首页 > 知识库问答 >
问题:

用于获取默认命名空间的XPath表达式

胥良平
2023-03-14

我正在寻找一个XPath表达式来获取节点的默认名称空间。

我的XML文档可能如下所示。

<aaa>
    <bbb xmlns="ns1" xmlns:ggg="ns2" attribute="value" attribute2="value2">
        <ccc />
    </bbb>
    <bbb xmlns="ns4" xmlns:ggg="ns5" attribute="value" attribute2="value2">
        <ddd />
    </bbb>
</aaa>
/aaa/*[name()='bbb' and position()=1]/attribute::*
/aaa/*[name()='bbb' and position()=1]/namespace::*

如果有人能给我一点提示,我将不胜感激。

共有1个答案

安聪
2023-03-14

你的表情

/aaa/*[name()='bbb' and position()=1]/namespace::*

是正确的,并返回三个命名空间节点。问题可能出在这些节点返回后的处理方式上。这个表达式应该在XPath 1.0和XPath 2.0中都可以使用,尽管我还没有用JDK内置的XPath引擎检查过它。

(顺便提一下,由于您使用的是JDK1.7,因此您使用的是XPath 1.0这一概念是完全不符合逻辑的,因为有几个XPath 2.0引擎可供Java用户使用)。

/aaa/*[name()='bbb' and position()=1]/namespace::*[name()='']

或者确实,由于此查询已经假设bbb元素在默认名称空间中,因此使用

namespace-uri(/aaa/*[name()='bbb' and position()=1])
 类似资料:
  • 我需要使用默认命名空间创建/读取xml文件: 但我得到: 我知道包级元数据,但这在复杂的包结构中不起作用: 我已经定义了模型类,如Address: 客户: 公共字段的父类: 然后是保存具体xml XmlBoo的数据/结构的特定类: XmlFoo: package-info.java包括在两个提到的包example.xml.boo: 和example.xml.foo: 最后是主要方法: 我在这里尝试

  • 问题内容: 我想使用JDOM读取XML文件,然后使用XPath从JDOM Document中提取数据。它可以很好地创建Document对象,但是当我使用XPath在Document中查询元素列表时,我什么也没得到。 我的XML文档在根元素中定义了一个默认名称空间。有趣的是,当我删除默认名称空间时,它成功运行了XPath查询并返回了我想要的元素。要使XPath查询返回结果,我还必须做什么? XML:

  • 我想要一些关于使用saxon对默认命名空间进行xpath解析的信息。我使用Saxon-HE-9.5.1-3.jar在代码中使用xpath 2特性。在类路径中包含saxon库之后,我面临着一个问题,即使用默认名称空间解析XML文档的xpath。 am中的示例XML使用: 有效XPATH: /RESPONSE/HEADER/HITS 以下是它工作和不工作的情况: > "XPATH Works":未指定

  • 问题内容: 我要对此文件执行XPath查询(显示的摘录): 这是我正在使用的代码的摘要: 我面临的问题是,在XPath查询中引用默认名称空间时,不会调用getNamespaceURI方法来解决它。例如,此查询不提取任何内容: 现在,我尝试通过用假前缀替换来“诱骗”解析器,然后相应地编写方法(以便在遇到问题时返回)。在这种情况下,将调用,但是XPath表达式求值的结果始终是一个空字符串。 如果我从文

  • 我想对这个文件进行XPath查询(显示节选): 这是我正在使用的代码片段: 我面临的问题是,在XPath查询中引用默认名称空间时,不会调用getNamespaceURI方法来解决它。例如,此查询不提取任何内容: 现在,我尝试“欺骗”解析器,用假前缀替换,然后相应地编写方法(以便返回当遇到时)。在本例中,调用了,但XPath表达式求值的结果始终是空字符串。 如果我从文件和XPath查询表达式中去掉名

  • 问题内容: 我花了整整一天的时间尝试从以下文档中提取一个XML节点,并且无法掌握XML命名空间的细微差别以使其正常工作。 XML文件总的来说很大,所以这是与我有关的部分: 该文档继续进行,并且从头到尾都井井有条。我正在尝试从“ documentnbr”标签(底部的三个)中提取“ number”属性。 我用于执行此操作的代码如下所示: 其中QUERY_FORM_NUMBER是我的XPath表达式,而