需求:读取用户发送的xml文件,得到"BBZ001"节点的值。格式如下:
<Msg>
<detail> <BBZ001>xxx</BBZ001> </detail>
<detail> <BBZ001>xxx</BBZ001> </detail>
</Msg>
解决:引入“org.w3c.dom.Document”包通过document类得到xml的节点值
//1、创建一个DocumentBuilderFactory的对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { //2、创建一个DocumentBuilder的对象 DocumentBuilder db = dbf.newDocumentBuilder(); //3、通过DocumentBuilder对象的parser方法加载xml文件到当前项目下 /*注意导入Document对象时,要导入org.w3c.dom.Document包下的*/ Document document = db.parse(filepath);//传入文件名可以是相对路径也可以是绝对路径 //获取所有Detail节点的集合 NodeList detailList = document.getElementsByTagName("Detail"); //通过nodelist的getLength()方法可以获取detailList的长度 System.out.println("一共有" + detailList.getLength() + "条明细"); //遍历每一个Detail节点 for (int i = 0; i < detailList.getLength(); i++) { //❤未知节点属性的个数和属性名时: //通过 item(i)方法 获取一个detail节点,detailList的索引值从0开始 Node detail = detailList.item(i); //解析detail节点的子节点 NodeList childNodes = detail.getChildNodes(); //遍历childNodes获取每个节点的节点名和节点值 for (int k = 0; k < childNodes.getLength(); k++) { //区分出text类型的node以及element类型的node if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE && childNodes.item(k).getFirstChild()!= null && childNodes.item(k).getNodeName().equals("BBZ001")){ //获取了element类型节点的节点值 logger.info("--节点值是:" + childNodes.item(k).getFirstChild().getNodeValue()); // System.out.println("--节点值是:" + childNodes.item(k).getTextContent()); } } } } catch (ParserConfigurationException e) { e.printStackTrace(); }