XML 解析 - 如何使用 for 循环将子元素添加到数组列表

XML parsing - How to add child elements to an Array list using for loop

我正在努力解决 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());

假设您的 staff 元素仅包含子元素而没有进一步的嵌套元素,访问所有这些子元素的最简单方法是

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

然后您可以遍历 NodeList 并将每个元素的 getTextContent() 添加到您的 ArrayList

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

正如 Martin 所说,您可以执行以下操作:

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
}