需求:讀取用戶發送的xml文件,獲得"BBZ001"節點的值。格式以下:node
<Msg>dom
<detail> <BBZ001>xxx</BBZ001> </detail>ui
<detail> <BBZ001>xxx</BBZ001> </detail>xml
</Msg>對象
解決:引入「org.w3c.dom.Document」包經過document類獲得xml的節點值索引
//一、建立一個DocumentBuilderFactory的對象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
//二、建立一個DocumentBuilder的對象
DocumentBuilder db = dbf.newDocumentBuilder();
//三、經過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();
}element