如何用Java DOM同时读取XML中的caseResult、aName及proname
实现方法
要同时获取全局的aName(FMgr)、每个caseResult对应的proname以及caseResult内部内容,只需在原有DOM代码基础上补充以下逻辑:
步骤1:获取全局的mInfo/aName
在遍历caseResult之前,先从根节点定位到唯一的mInfo元素,提取其中的aName值。
步骤2:获取每个caseResult对应的proname
每个caseResult的直接父节点是Result,通过getParentNode()方法向上获取父节点后,即可提取该节点下的proname。
步骤3:完整提取caseResult内部内容
遍历caseResult下的所有aResult节点,拿到所有aName值,避免仅获取第一个节点的内容。
完整代码示例
File file = new File("...//filepath"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(file); doc.getDocumentElement().normalize(); // 获取全局的FMgr Element root = doc.getDocumentElement(); Element mInfo = (Element) root.getElementsByTagName("mInfo").item(0); String globalAName = mInfo.getElementsByTagName("aName").item(0).getTextContent(); System.out.println("全局aName: " + globalAName); // 遍历所有caseResult NodeList caseResultNodes = doc.getElementsByTagName("caseResult"); for (int itr = 0; itr < caseResultNodes.getLength(); itr++) { Node node = caseResultNodes.item(itr); if (node.getNodeType() == Node.ELEMENT_NODE) { Element caseResult = (Element) node; // 获取当前caseResult对应的proname Element parentResult = (Element) node.getParentNode(); String proName = parentResult.getElementsByTagName("proname").item(0).getTextContent(); System.out.println("当前caseResult所属proname: " + proName); // 获取caseResult中的failure值 String failure = caseResult.getElementsByTagName("failure").item(0).getTextContent(); System.out.println("failure: " + failure); // 获取所有aResult下的aName NodeList aResults = caseResult.getElementsByTagName("aResult"); for (int i = 0; i < aResults.getLength(); i++) { Element aResult = (Element) aResults.item(i); String aName = aResult.getElementsByTagName("aName").item(0).getTextContent(); System.out.println("aName: " + aName); } System.out.println("-----------"); } }
代码说明
- 全局
aName:通过根节点直接定位唯一的mInfo元素,提取目标值。 proname:利用DOM节点的父子关系,从caseResult向上找到父节点Result后提取。caseResult内部内容:遍历所有aResult节点,确保不会遗漏任何aName值。
内容的提问来源于stack exchange,提问作者Srinivasan
相关产品推荐
相关产品推荐

