Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Persistence.xml中列出所有持久性单元_Xml_Xpath_Namespaces_Xml Namespaces - Fatal编程技术网

在Persistence.xml中列出所有持久性单元

在Persistence.xml中列出所有持久性单元,xml,xpath,namespaces,xml-namespaces,Xml,Xpath,Namespaces,Xml Namespaces,我试图使用XPath获取persistence.xml中所有持久性单元的列表,但遇到了问题。我认为可行的方法是: //persistence/persistence-unit * 后者为我提供了持久化子级,至少我可以手动迭代,但这违背了XPath的目的 以下是my persistence.xml的一个片段: <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/n

我试图使用XPath获取persistence.xml中所有持久性单元的列表,但遇到了问题。我认为可行的方法是:

//persistence/persistence-unit

*
后者为我提供了持久化子级,至少我可以手动迭代,但这违背了XPath的目的

以下是my persistence.xml的一个片段:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
             version="1.0">
    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">

有什么想法吗


沃尔特这是一个常见问题。只要XML文档声明了默认名称空间,XPath表达式中的任何无前缀节点测试都将被视为“无名称空间”。XPath表达式不选择所需的节点,因为它们的名称不在“无命名空间”中,而是在声明的默认命名空间中:

解决方案(任一):

  • 注册默认名称空间并将其与前缀关联(例如
    “xxx”
    )。阅读您正在使用的特定XPath引擎(主机)的文档,以了解如何准确地执行此操作。然后使用这个XPath表达式:
    //xxx:persistence/persistence unit

  • 使用:
    /*[name()='persistence']/*[name()='persistence-unit']

  • 最后,但并非最不重要的一点是,尽量避免使用
    /
    缩写,因为它通常会导致异常,而且效率也很低

    例如,如果您知道所有
    持久化单元
    元素都是顶层元素的子元素,则使用:

    /*/xxx:persistence-unit
    

    好问题(+1)。请看我的答案以获得解释和两种不同的正确解决方案。啊,精彩绝伦。我要试一试。