Java 从orm.xml的元素中选择文本的XPath表达式是什么?

Java 从orm.xml的元素中选择文本的XPath表达式是什么?,java,xpath,Java,Xpath,我读过书,认为我有了大概的想法。但是,和往常一样,XPath站起来,对我发出嘶嘶声,然后急忙跑去寻找最近的细菌滋生的小便器淹死 我有一个JPA orm.xml文件。看起来是这样的: <?xml version="1.0" encoding="UTF-8" ?> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.

我读过书,认为我有了大概的想法。但是,和往常一样,XPath站起来,对我发出嘶嘶声,然后急忙跑去寻找最近的细菌滋生的小便器淹死

我有一个JPA orm.xml文件。看起来是这样的:

<?xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
                                     http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
                 version="2.0">
  <persistence-unit-metadata>
    <persistence-unit-defaults>
      <schema>test</schema>
      <catalog>test</catalog>
    </persistence-unit-defaults>
  </persistence-unit-metadata>
</entity-mappings>
但使用Java的XPath实现时,情况并非如此

更具体地说,下面的代码在最后一行使用JUnit断言时失败。文本变量的值是空字符串

// Find the file: URL to the orm.xml I mentioned above.
final URL ormUrl = Thread.currentThread().getContextClassLoader().getResource("META-INF/orm.xml");
assertNotNull(ormUrl);

final XPathFactory xpf = XPathFactory.newInstance();
assertNotNull(xpf);

final XPath xpath = xpf.newXPath();
assertNotNull(xpath);

final XPathExpression expression = xpath.compile("/entity-mappings/persistence-unit-metadata/persistence-unit-defaults/schema/text()");
assertNotNull(expression);
final String text = expression.evaluate(new InputSource(ormUrl.openStream()));
assertEquals("test", text);
这似乎让人怀疑我对XPath表达式的理解有多少。然后,我想看看一个简单的/是否会选择根元素。幸运的是,这返回了一个非空的NodeList,但是NodeList是空的。我真的不想找到JavaXPath支持的作者并把他们串起来,但要不遵循这一过程就变得非常困难了


请帮我一劳永逸地打我的头。谢谢。

问题是XML声明了一个默认名称空间

xmlns="http://java.sun.com/xml/ns/persistence/orm"

在XPath表达式中,您没有提供相应的命名空间上下文。有关如何使用命名空间上下文的详细信息,请参见。这里有很多细节,但总而言之,您必须编写自己的实现,以允许XPath处理器将名称空间前缀映射到URI。在您的情况下,您必须提供一个默认名称空间到相应URI的映射。

非常好,所有信息都在XML本身中!;非常感谢。以下是拯救我的培根的直接链接:此常见问题解答的众多链接之一:
xmlns="http://java.sun.com/xml/ns/persistence/orm"