Выражение XPath ничего не возвращает для // элемента, но // * возвращает счет - PullRequest
4 голосов
/ 24 февраля 2010

Я использую XOM со следующими примерами данных:

Element root = cleanDoc.getRootElement();
//find all the bold elements, as those mark institution and clinic.
Nodes nodes = root.query("//*");

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml">
    <head>
        <title>Patient Information</title>
    </head>
</html>

Следующий элемент возвращает много элементов (из реальных данных):

//*

но что-то вроде

//head

ничего не возвращает. Если я пробегаю дочерние элементы корня, кажется, что числа совпадают, и если я печатаю имя элемента, все выглядит правильно.

Я беру HTML, анализирую его с помощью tagoup, а затем создаю документ XOM из полученной строки. Какая часть этого может пойти так ужасно неправильно? Я чувствую, что здесь происходит какая-то странная проблема с кодированием, но я просто не вижу этого. Строки Java - это строки, верно?

1 Ответ

6 голосов
/ 24 февраля 2010

Ваш документ имеет пространство имен по умолчанию, что означает, что в модели XPath все элементы находятся в этом пространстве имен.

Запрос должен быть //html:head. Вам нужно будет предоставить сопоставление пространства имен для запроса XPath.

Обратите внимание, что хотя выражение XPath использует префикс пространства имен, оно должно соответствовать пространству имен uri.

XPathContext ctx = new XPathContext("html", "http://www.w3.org/1999/xhtml");
Nodes nodes = root.query("//html:head", ctx );
...