JAVA8 可以使用标准的 DOM 方式的 API 来编写代码解析 XML 文件,无需引入第三方依赖。下面是两个测试用的 XML 文件:
test.xml
1 2 3
- item0
- item1
- item2
张三 男 高启兰 女
test2.xml
1 3
- item0
- item1
- item2
负责接收所有信息的 AllDataDTO.java
package zhangchao; import java.util.ArrayList; import java.util.List; public class AllDataDTO { private Integer pan; private Integer tilt; private Integer zoom; private Listlist = new ArrayList<>(); private String panAttr1; private String panAttr2; private List userList = new ArrayList<>(); /// // setters/getters /// @Override public String toString() { final StringBuffer sb = new StringBuffer("AllDataDTO{"); sb.append("pan=").append(pan); sb.append(", tilt=").append(tilt); sb.append(", zoom=").append(zoom); sb.append(", list=").append(list); sb.append(", panAttr1='").append(panAttr1).append('\''); sb.append(", panAttr2='").append(panAttr2).append('\''); sb.append(", userList=").append(userList); sb.append('}'); return sb.toString(); } public List getUserList() { return userList; } public void setUserList(List userList) { this.userList = userList; } public List getList() { return list; } public void setList(List list) { this.list = list; } public String getPanAttr1() { return panAttr1; } public void setPanAttr1(String panAttr1) { this.panAttr1 = panAttr1; } public String getPanAttr2() { return panAttr2; } public void setPanAttr2(String panAttr2) { this.panAttr2 = panAttr2; } public Integer getPan() { return pan; } public void setPan(Integer pan) { this.pan = pan; } public Integer getTilt() { return tilt; } public void setTilt(Integer tilt) { this.tilt = tilt; } public Integer getZoom() { return zoom; } public void setZoom(Integer zoom) { this.zoom = zoom; } }
负责接收用户信息的 AllDataUserDTO.java
package zhangchao; public class AllDataUserDTO { private String name; private String gender; @Override public String toString() { final StringBuffer sb = new StringBuffer("AllDataUserDTO{"); sb.append("name='").append(name).append('\''); sb.append(", gender='").append(gender).append('\''); sb.append('}'); return sb.toString(); } /// // setters/getters /// public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
处理 XML 文件的工具类,XmlUtils.java
package zhangchao; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.IOException; public class XmlUtils { public static AllDataDTO parseXml(String xmlFilePath) { File file = new File(xmlFilePath); if (!file.exists()) { return null; } DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//创建一个DocumentBuilderFactory的对象 DocumentBuilder builder; AllDataDTO allDataDTO = null; try { builder = factory.newDocumentBuilder();//创建一个DocumentBuilder对象 Document doc = builder.parse("file:///" + xmlFilePath); Element root = doc.getDocumentElement();//获取根节点 allDataDTO = new AllDataDTO(); NodeList childNodes = root.getChildNodes(); int length = childNodes.getLength(); for (int i = 0; i < length; i++) { Node node = childNodes.item(i); String nodeName = node.getNodeName(); if ("pan".equals(nodeName)) { String content = node.getTextContent(); content = (content == null ? null : content.trim()); Integer tmp = null; try { tmp = Integer.parseInt(content); } catch (NumberFormatException e) {} allDataDTO.setPan(tmp); NamedNodeMap namedNodeMap = node.getAttributes(); Node attr1 = namedNodeMap.getNamedItem("attr1"); if (attr1 != null) { String attr1Cont = attr1.getTextContent(); attr1Cont = (attr1Cont == null ? null : attr1Cont.trim()); allDataDTO.setPanAttr1(attr1Cont); } Node attr2 = namedNodeMap.getNamedItem("attr2"); if (attr2 != null) { String attr2Cont = attr2.getTextContent(); attr2Cont = (attr2Cont == null ? null : attr2Cont.trim()); allDataDTO.setPanAttr2(attr2Cont); } } else if ("tilt".equals(nodeName)) { String content = node.getTextContent(); content = (content == null ? null : content.trim()); Integer tmp = null; try { tmp = Integer.parseInt(content); } catch (NumberFormatException e) {} allDataDTO.setTilt(tmp); } else if ("zoom".equals(nodeName)) { String content = node.getTextContent(); content = (content == null ? null : content.trim()); Integer tmp = null; try { tmp = Integer.parseInt(content); } catch (NumberFormatException e) {} allDataDTO.setZoom(tmp); } else if ("list".equals(nodeName)) { NodeList itemList = node.getChildNodes(); int itemLength = itemList.getLength(); for (int j = 0; j < itemLength; j++) { Node item = itemList.item(j); if ("item".equals(item.getNodeName())) { String content = item.getTextContent(); content = (content == null ? "" : content.trim()); allDataDTO.getList().add(content); } } } else if ("user-list".equals(nodeName)) { NodeList userList = node.getChildNodes(); int userListLength = userList.getLength(); for (int j = 0; j < userListLength; j++) { Node user = userList.item(j); // 读取用户的属性 if ("user".equals(user.getNodeName())) { AllDataUserDTO userDTO = new AllDataUserDTO(); NodeList params = user.getChildNodes(); int paramsLength = params.getLength(); for (int k = 0; k < paramsLength; k++) { Node param = params.item(k); String content = param.getTextContent(); if (content != null) { content = content.trim(); } String paramName = param.getNodeName(); if ("name".equals(paramName)) { userDTO.setName(content); } else if ("gender".equals(paramName)) { userDTO.setGender(content); } } allDataDTO.getUserList().add(userDTO); } } } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } return allDataDTO; } }
用于测试效果的类 Main.java
package zhangchao; public class Main { public static void main(String[] args) { AllDataDTO allDataDTO = XmlUtils .parseXml("E:\\ws\\zc\\Java8Xml\\src\\main\\resources\\TestFile\\" + "test.xml"); AllDataDTO allDataDTO2 = XmlUtils .parseXml("E:\\ws\\zc\\Java8Xml\\src\\main\\resources\\TestFile\\" + "test2.xml"); System.out.println(allDataDTO); System.out.println(allDataDTO2); } }
输出结果:
AllDataDTO{pan=1, tilt=2, zoom=3, list=[item0, item1, item2], panAttr1='a', panAttr2='b', userList=[AllDataUserDTO{name='张三', gender='男'}, AllDataUserDTO{name='高启兰', gender='女'}]} AllDataDTO{pan=1, tilt=null, zoom=3, list=[item0, item1, item2], panAttr1='a', panAttr2='null', userList=[]}
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章