Dom4j selectNodes(arg) не дает список узлов
Я использую DOM4j для работы с XML в Java, мой XML выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<abcd name="ab.catalog" xmlns="http://www.xyz.com/pqr" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xyz.com/pqr ./abc.xyz.xsd">
<efg>
......
</efg>
<efg>
.....
</efg>
</abcd>
затем,
List<Node>list = document.selectNodes("/abcd/efg");
получает размер списка ноль. Я чувствую, что это связано с пространством имен, указанным в XML. Я много пробовал, но не смог добиться успеха.
2 ответа
Решение
Имена элементов без префиксов в выражениях XPath относятся к элементам, которые не находятся в пространстве имен - они не учитывают "по умолчанию" xmlns="..."
Пространство имен объявлено в документе. Вам необходимо объявить префикс для пространства имен в движке XPath, а затем использовать этот префикс в выражении. Вот пример, вдохновленный Javadocs DOM4J:
Map uris = new HashMap();
uris.put("pqr", "http://www.xyz.com/pqr");
XPath xpath = document.createXPath("/pqr:abcd/pqr:efg");
xpath.setNamespaceURIs(uris);
List<Node> nodes = xpath.selectNodes(document);
Изменить ваш код:
List<Node>list = document.selectNodes("//abcd/efg");