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
}
我正在努力解决 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
}