Dom4j XPath различает пустую или пустую строку - PullRequest
0 голосов
/ 04 октября 2010

У меня есть элемент схемы XML, подобный этому:

<xs:element type="xs:string" name="IsActive" minOccurs="0"> </xs:element>

Я использую XPath dom4j для оценки элемента.

Кажется невозможным определить, присутствует ли элемент в документе XML или его значение просто "".

Я хочу, чтобы <IsActive> было либо: 1) "" 2) "anyvalue1" 3) "anyvalue"

Также я хотел бы знать, присутствует ли <IsActive>.

XPath valuePath;
Node obj = (Node)valuePath.selectSingleNode(requestElement);

obj.getText() всегда возвращает "", даже если <IsActive> отсутствует.

valuePath.valueOf(requestElement); // does the same

Итак, мой вопрос: как различить пустую и пустую строку?

1 Ответ

2 голосов
/ 04 октября 2010

Как насчет:

List nodeList = valuePath.selectNodes(requestElement);
if (nodeList.isEmpty()) ...

Обновление: @ Алехандро указал, что было бы полезно добавить объяснения.

Очевидно, что selectSingleNode () не возвращает null и не предлагает какой-либо другой способ отличить выражение XPath от контекста, который приводит к пустому набору узлов, и тех, которые дают один или несколько узлов. Так что это не удовлетворит насущную потребность.

Однако selectNodes () возвращает Список узлов, соответствующих выражению XPath в данном контексте. Итак, предположительно, мы можем использовать метод List.isEmpty () (или метод size ()), чтобы определить, соответствует ли XPath нулевым узлам или ненулевым.

Если узел сопоставляется, чтобы получить (первый) сопоставляемый узел, мы можем использовать nodeList.get(0):

List nodeList = valuePath.selectNodes(requestElement);
if (!nodeList.isEmpty())
    doSomethingWith(nodeList.get(0));

Я не проверял это, но это должно сделать вас в пределах досягаемости вашей цели.

...