Как выбрать и поместить в строку значение атрибута элемента с помощью запроса XPath в Java?

Я новичок в запросе XPath в Java, и у меня есть следующая проблема:

У меня есть переменная org.jdom.Document documentXML, которая содержит следующее содержимое XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <status>
    <id>0</id>
    <message>Operazione conclusa con successo</message>
  </status>
  <drivers>
    <drive id="MyID">
      <propery1 />
      <property2 />
      <property3 />
      <property4>0</property4>
      <sproperty5>104857600</property5>
      <property6 />
    </drive>
  </drivers>
</root>

Мне нужно выбрать значение внутри атрибута id и поместить его в строку (поэтому мне нужно поместить значение «MyID» в строку)

В Java мне нужно что-то вроде этого (это не работает):

org.jdom.output.XMLOutputter xmlOutputterCDATAContent = new org.jdom.output.XMLOutputter(org.jdom.output.Format.getPrettyFormat());

xmlOutputter.output(documentXML, System.out);

xPath = XPath.newInstance("/root/drivers/drive/@id");
objectElement = (Element) xPath.selectSingleNode(documentXML);
driveId = objectElement.getValue();
System.out.println("ID " + objectElement.getValue() + " /ID");

Итак, как видите, переменная documentXML содержит предыдущий код XML.

Я создаю запрос XPath для доступа к значению атрибута id узла диска, затем пытаюсь поместить это значение в driveId ( это объект String)

Но таким образом не может работать, и когда я запускаю этот код, я получаю следующее сообщение об ошибке:

java.lang.ClassCastException: org.jdom.Attribute cannot be cast to org.jdom.Element

В чем проблема? Что мне не хватает? Как я могу решить?

Tnx

Андреа


person AndreaNobili    schedule 11.12.2013    source источник
comment
Ну, MyID - это атрибут, а не элемент, поэтому я думаю, что вы делаете неправильное приведение.   -  person gtgaxiola    schedule 11.12.2013


Ответы (2)


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

Следовательно, вам просто нужно изменить свой актерский состав с org.jdom.Element на org.jdom.Attribute. Затем вы можете вызвать driveId.getValue(), чтобы получить строковое значение для идентификатора.

person Simikolon    schedule 11.12.2013

Вы можете использовать jcabi-xml и сделать это одной строкой:

String id = new XMLDocument(xml).xpath("/root/drivers/drive/@id").get(0);
person yegor256    schedule 11.12.2013