Я пытаюсь проанализировать документ с помощью Dom4J. Этот документ исходит от разных поставщиков, а иногда и с пространствами имен, а иногда и без него.Как разобрать XMLDocument в нейтральном пространстве имен с использованием JDOM
Для например:
<book>
<author>john</author>
<publisher>
<name>John Q</name>
</publisher>
</book>
или
<book xmlns="http://schemas.xml.com/XMLSchemaInstance">
<author>john</author>
<publisher>
<name>John Q</name>
</publisher>
</book>
или
<book xmlns:i="http://schemas.xml.com/XMLSchemaInstance">
<i:author>john</i:author>
<i:publisher>
<i:name>John Q</i:name>
</i:publisher>
</book>
У меня есть список XPaths. Я разбираю документ в классе Document, а затем выполняю поиск по нему с помощью xpaths.
Document doc = parseDocument(documentFile);
List<String> XmlPaths = new List<String>();
XmlPaths.add("book/author");
XmlPaths.add("book/publisher/name");
for (int i = 0; i < XmlPaths.size(); i++)
{
String searchPath = XmlPaths.get(i);
Node currentNode = doc.selectSingleNode(searchPath);
assert(currentNode != null);
}
Этот код не работает над последним документом, который использует префиксы пространства имен.
Я пробовал эти методы, но ни один из них, похоже, не работает.
1) изменением последнего элемента в XPath, чтобы быть нейтральным пространством имен:
/book/:author
/book/[local-name()='author']
/[local-name()='book']/[local-name()='author']
Все эти сгенерирует исключение, говоря, что формат XPATH не является правильным.
2) Добавление пространства имен uris в XPAth, после его создания с помощью DocumentHelper.createXPath();
Любая идея, что я делаю неправильно?
FYI Я использую DOM4J версии 1.5
Спасибо. Так оно и было. Хотя я не понимаю, почему мне нужно поставить *. Не является ли local-name() псевдоним для тега? – feroze
Я обновил свой naswer, чтобы добавить немного больше информации. –