Запрос XML с уникальной записью с использованием XPath Java ничего не возвращает - PullRequest
2 голосов
/ 22 марта 2011

Я пытаюсь получить значение одного элемента в файле XML.Я обрезал XML до соответствующего бита:

<opt>
    <security>
        <check>
            <secure>true</secure>
        </check>
    </security>
</opt>

Я пытаюсь получить значение true из элемента secure.

У меня есть следующий код:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder=domFactory.newDocumentBuilder();
Document doc = builder.parse(file);

XPath xpath=XPathFactory.newInstance().newXPath();
XPathExpression expr=xpath.compile("//opt/security/check/secure/text()");

Object result = expr.evaluate(doc, XPathConstants.STRING);
logger.warn(result.toString());

Я просто пытаюсь получить какое-либо значение на данный момент, и я изменю строку на Boolean, как только получу эту работу.

Мой вывод пуст, я пробовалкуча разных вещей, включая следование руководству и использование NodeLists (хотя это не имело особого смысла для меня, так как это уникальный элемент).Я что-то упустил?

Спасибо!

1 Ответ

2 голосов
/ 22 марта 2011

Ваш код работает с использованием реализации XPath по умолчанию в моей JVM (Sun / Oracle Java в Windows):

>java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode)

Двойная косая черта не обязательна в примере документа;as MSDN notes :

Выражение, которое использует двойную косую черту (//), указывает на поиск, который может включать ноль или более уровней иерархии.

Интересно, это проблема пространства имен:

domFactory.setNamespaceAware(true);

Вы можете попробовать пропустить эту строку или , предоставив NamespaceContext .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...