Проверка наличия атрибута погоды при разборе xml

Привет, я работаю с кодом, который анализирует xml

<a>
  <n>SomeVal</n>
  <c oldval="1">2</c>
<a>

Код Java, который анализирует xml, использует dom4j (valueOf) для анализа значений тегов, предоставляющих выражения xpath. Атрибут oldval можно получить, используя выражение xpath, например "c/@oldval". Проблема, которую я пытаюсь выяснить, заключается в том, как я могу определить, присутствует ли атрибут. Так как мне нужно различать случай, когда атрибут oldval отсутствует, и случай, когда он присутствует и пуст. Оба приведенных ниже xml вернут одно и то же значение для oldval.

<a>
  <n>SomeVal</n>
  <c>2</c>
<a>

And

<a>
  <b>SomeVal</b>
  <c oldval="">2</c>
<a>

person Pradyot    schedule 17.04.2018    source источник
comment
не уверен, что полностью понимаю, но вы можете использовать функцию string-length(), которая вернет 0, если значение атрибута было пустым.   -  person OldProgrammer    schedule 17.04.2018
comment
присутствует ли атрибут и является ли он пустым (то есть: пустая строка, указанная выше) или атрибут отсутствует, на данный момент не различимо. то есть: если вы используете xpath c/@oldval   -  person Pradyot    schedule 17.04.2018


Ответы (1)


вы можете либо проверить случай с содержащимся атрибутом через XPath:

/a/c[@oldval]

это вернет вам случай, если атрибут oldval присутствует. Если нет, проверьте еще раз, существует ли узел

/a/c

В качестве альтернативы вы сначала выбираете узел

/a/c

и теперь вы проверяете, содержит ли атрибут атрибут с

Element element = (Element) node;
String oldvalStr = element.attributeValue("oldval");

Вы также можете полностью выполнить тест в xpath, но не советовал бы вам, поскольку код Java довольно прост для понимания всеми разработчиками.

person cilap    schedule 17.04.2018