XML解析 - 如何使用for循环

时间:2015-08-06 16:12:10

标签: java xml for-loop arraylist xml-parsing

我正在努力处理for循环条件,该条件可以将所有xml子元素添加到ArrayList。我可以添加每个子节点而不使用如下所示的循环

testData.add(eElement.getElementsByTagName("server").item(0).getTextContent());

我对如何使用for循环添加所有元素感到困惑。这是我的测试代码:

ArrayList<String> testData = null;
        testData = new ArrayList<>();
        File fXmlFile = new File("C://Javaseleniumworld/soemthing.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);
        doc.getDocumentElement().normalize();
        System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
        NodeList nList = doc.getElementsByTagName("staff");
        System.out.println("----------------------------");
        for (int temp = 0; temp < nList.getLength(); temp++) {
            Node nNode = nList.item(temp);
            System.out.println("\nCurrent Element :" + nNode.getNodeName());
            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) nNode;
                testData.add(eElement.getElementsByTagName("server").item(0).getTextContent());
                testData.add(eElement.getElementsByTagName("username").item(0).getTextContent());
                testData.add(eElement.getElementsByTagName("password").item(0).getTextContent());
                testData.add(eElement.getElementsByTagName("firstname").item(0).getTextContent());
                testData.add(eElement.getElementsByTagName("dobmm").item(0).getTextContent());
                testData.add(eElement.getElementsByTagName("dobdd").item(0).getTextContent());
                testData.add(eElement.getElementsByTagName("dobyyyy").item(0).getTextContent());

2 个答案:

答案 0 :(得分:0)

假设您的staff元素仅包含没有其他嵌套元素的子元素,则访问所有这些子元素的最简单方法是

NodeList childEls = eElement.getElementsByTagName("*");

然后您可以循环显示NodeList并将每个元素的getTextContent()添加到ArrayList

或者您需要处理eElement.getChildNodes()并确保只通过检查子节点集合中每个节点上的'getNodeType()`来将元素节点添加到列表中。

答案 1 :(得分:0)

马丁告诉你可以这样做:

var all = document.getElementsByTagName("*");  
for (var i=0, max=all.length; i < max; i++) {  
// Do something with the element here  like add element in arraylist
}