[英]How to get selected value from xml?
也許有人可以幫我解決這個問題。 我嘗試使用以下代碼生成XML文件:
protected void parseAndReadXML (String xmlFile){
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
try {
Document doc = db.parse(xmlFile);
doc.getDocumentElement().normalize();
System.out.println(doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("films");
System.out.println("Information of comedy films");
for(int i=0; i<nList.getLength();i++){
Node firstNode = nList.item(i);
if(firstNode.getNodeType() == Node.ELEMENT_NODE){
Element firstElem = (Element) firstNode;
NodeList fstNmElmntLst = firstElem.getElementsByTagName("name");
Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
NodeList fstNm = fstNmElmnt.getChildNodes();
System.out.println("Name : " + ((Node) fstNm.item(0)).getNodeValue());
NodeList secNmElmntLst = firstElem.getElementsByTagName("actor");
Element secNmElmnt = (Element) secNmElmntLst.item(0);
NodeList secNm = secNmElmnt.getChildNodes();
System.out.println("Actor Name : " + ((Node) secNm.item(0)).getNodeValue());
NodeList therNmElmntLst = firstElem.getElementsByTagName("year");
Element lstNmElmnt = (Element) therNmElmntLst.item(0);
NodeList therNm = lstNmElmnt.getChildNodes();
System.out.println("Year : " + ((Node) therNm.item(0)).getNodeValue());
}
}
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
這是我使用的XML
<CinemaCity>
<genre>
<comedy>
<films>
<name>A</name>
<actor>CBrus</actor>
<year>111</year>
</films>
<films>
<name>B</name>
<actor>CBrus2</actor>
<year>111</year>
</films>
<films>
<name>C</name>
<actor>CBrus3</actor>
<year>111</year>
</films>
<films>
<name>D</name>
<actor>CBrus4</actor>
<year>111</year>
</films>
</comedy>
<horror>
<films>
<name>A</name>
<actor>HBrus</actor>
<year>111</year>
</films>
<films>
<name>B</name>
<actor>HBrus2</actor>
<year>111</year>
</films>
<films>
<name>C</name>
<actor>HBrus3</actor>
<year>111</year>
</films>
<films>
<name>D</name>
<actor>HBrus4</actor>
<year>111</year>
</films>
</horror>
</genre>
</CinemaCity>
我只需要打印喜劇電影。 運行這段代碼后,我得到所有類型的所有電影。
我做錯了什么?
您應該使用xpath搜索XML文檔。 它不僅是最簡潔的api,而且在遍歷XML文檔時也是最高效的。
這是您需要的代碼:
import javax.xml.xpath.*;
import javax.xml.parsers.*;
Document doc = db.parse(xmlFile);
XPath xPath = XPathFactory.newInstance().newXPath();
NodeList nList = (NodeList)xPath.compile("/CinemaCity/genre/comedy/films")
.evaluate(doc, XPathConstants.NODESET);
System.out.println("Information of comedy films");
...
用這條線
NodeList nList = doc.getElementsByTagName("films");
您選擇所有電影。 如果將影片修改為喜劇,則節點列表將包含喜劇下的所有影片。
更改:
NodeList nList = doc.getElementsByTagName("films");
至:
NodeList nList = doc.getElementsByTagName( "comedy" ).item( 0 ).getChildNodes();
在這種情況下,您將選擇第一個喜劇電影節點,然后為其選擇所有子節點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.