【问题标题】:XML parsing - How to add child elements to an Array list using for loopXML 解析 - 如何使用 for 循环将子元素添加到数组列表
【发布时间】:2015-08-06 16:12:09
【问题描述】:

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

【问题讨论】:

  • 在所有孩子的员工下,此代码正在列表中添加文本值
  • 我们对您没有提出明确的问题感到困惑。您的代码已经将元素添加到列表中,不是吗?你还需要它做什么?
  • 我需要在循环中添加元素而不通过标记名获取元素。我非常接近但对如何循环遍历所有子元素感到困惑

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    正如 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
    }  
    

    【讨论】:

    • 谢谢!我终于能够解析 XML 并使用该数据驱动我的 selenium 脚本。
    猜你喜欢
    • 1970-01-01
    • 2020-08-12
    • 2013-11-16
    • 1970-01-01
    • 2019-11-05
    • 2023-03-02
    • 2018-01-27
    • 1970-01-01
    • 2019-04-02
    相关资源
    最近更新 更多