如何从xml中获取选定的值?

时间:2015-05-20 06:20:37

标签: java xml

也许有人可以帮我解决这个问题。 我尝试使用以下代码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();
        }   
    }

我只需要打印喜剧电影。 运行此代码后,我将获得所有类型的所有电影 我做错了什么?

3 个答案:

答案 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();

在这种情况下,您选择第一个喜剧电影节点,然后选择所有子节点。