如何在Java中使用XPath查询选择元素的属性值并将其放入String中?

时间:2013-12-11 15:34:24

标签: java xml xpath xml-parsing jdom

我是 XPath 查询Java的新手,我遇到以下问题:

我有一个包含以下XML内容的 org.jdom.Document documentXML 变量:

<?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属性中选择值并将其放入String中(因此我必须将“MyID”值放在String中)

在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

安德烈

2 个答案:

答案 0 :(得分:1)

与您已经提到的一样,您要获取的ID是属性

因此,您只需将演员名从org.jdom.Element更改为org.jdom.Attribute即可。 然后,您可以调用driveId.getValue()来获取id的String值。

答案 1 :(得分:0)

您可以使用jcabi-xml并在一行中完成此操作:

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