我是 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
安德烈
答案 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);