过去两天我坚持这项任务,并没有通过不同的文章得到任何明确的解决方案。所以请给我一步一步的代码来检索XML中存在的XPath值。
我的XML是
<bookstore>
<book>
<int name="sno">1</int>
<str name="author">J K. Rowling</str>
<int name="price">29.99</int>
<str name="subauthor">J K</str>
</book>
<book>
<int name="sno">2</int>
<str name="author">J K. Rowling</str>
<int name="price">29.99</int>
<str name="subauthor">hamilton</str>
</book>
</bookstore>
在这个XML中,我需要每个作者,价格和子作者的价值观。 我的预期结果是:
(author-J K. Rowling,price-29.99,subauthor-j k)
然后如何从这个XML中获取子作者的最后一个值。
我获取此值的java代码无效。它仅引发例外。
public gettheXMLvalues() {
try {
NodeList nodeLst1 = doc.getElementsByTagName("doc");
for (int i = 0; i < nodeLst1.getLength(); i++) {
Node node = nodeLst1.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
NodeList nodes = element.getElementsByTagName("//str[@name='author']").item(0).getChildNodes();
node = (Node) nodes.item(0);
System.out.println("ELEMETS " + element.getTextContent());
System.out.println("Author" + node.getNodeValue());
}
} catch(Exception e){
system.out.println("Exception "+e);
}
}
请给我一个解决方案,以获得每本书的作者,价格和子作者的价值。我尝试了很多东西来获得结果,但不幸的是我没有得到结果。请给我一个明确的解决方案。
答案 0 :(得分:0)
public static ArrayList gettheXMLvalues(Document xmlDocument,String author)抛出异常{
ArrayList<String> result = new ArrayList<String>();
List<Element> elementList = xmlDocument.selectNodes("//str[@name='author']");
if (elementList == null) {
return result;
}
ArrayList<Element> listAuthor = new ArrayList<Element>();
for (int i = 0; i < elementList.size(); i++) {
Element el = elementList.get(i);
if (el.getText().equalsIgnoreCase(author)) {
listAuthor.add(el);
}
}
if (listAuthor.size() == 0) {
return result;
}
else {
String authorLine = "";
for (int i = 0; i < listAuthor.size(); i++) {
Element element = listAuthor.get(i);
Element price = (Element)element.getParent().selectSingleNode("./int[@name='price']");
Element subauthor = (Element) element.getParent().selectSingleNode("./str[@name='subauthor']");
authorLine = "author-" + author + ",price-" + price.getText() + ",subauthor-" + subauthor.getText();
result.add(authorLine);
}
}
return result;
}