也许有人可以帮我解决这个问题。 我尝试使用以下代码reed XML文件:
labelid.Text = comboBoxId.SelectedItem.ToString();
这是我使用它的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();
}
}
我只需要打印喜剧电影。 运行此代码后,我将获得所有类型的所有电影 我做错了什么?
答案 0 :(得分:2)
您应该使用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");
...
答案 1 :(得分:1)
使用此行
NodeList nList = doc.getElementsByTagName("films");
您选择所有电影。如果您将影片修改为喜剧,您的节点列表将包含所有喜剧电影。
答案 2 :(得分:0)
变化:
NodeList nList = doc.getElementsByTagName("films");
要:
NodeList nList = doc.getElementsByTagName( "comedy" ).item( 0 ).getChildNodes();
在这种情况下,您选择第一个喜剧电影节点,然后选择所有子节点。