xml
<?xml version="1.0" encoding="utf-8"?>
<request>
<serSupplier>111</serSupplier>
<serCaller>222</serCaller>
<callerPwd>333</callerPwd>
<callTime>444</callTime>
<opDetail>
<recordInfo>
<fieldInfo>
<fieldChName>告警ID</fieldChName>
<fieldEnName>alarmId</fieldEnName>
<fieldContent>111111</fieldContent>
</fieldInfo>
<fieldInfo>
<fieldChName>工单ID</fieldChName>
<fieldEnName>sheetNo</fieldEnName>
<fieldContent>2222222</fieldContent>
</fieldInfo>
</recordInfo>
<recordInfo>
<fieldInfo>
<fieldChName>告警ID</fieldChName>
<fieldEnName>alarmId</fieldEnName>
<fieldContent>3333333</fieldContent>
</fieldInfo>
<fieldInfo>
<fieldChName>工单ID</fieldChName>
<fieldEnName>sheetNo</fieldEnName>
<fieldContent>4444444</fieldContent>
</fieldInfo>
</recordInfo>
</opDetail>
</request>
public static void main(String[] args) {
//实体类
XmlField xmlField = null;
List<XmlField> list = new ArrayList<>();
//创建DOM解析器的工厂实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
//从DOM工厂中获取解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//解析xml
Document document = db.parse(new ByteArrayInputStream(xml.getBytes()));
/*Document document = db.parse(new File("E:/1.xml"));*/
/*Document document = db.parse(new InputSource(new StringReader(xml)));*/
//获取所有fieldInfo节点的集合
NodeList nodeList = document.getElementsByTagName("fieldInfo");//4个fieldInfo
//通过nodelist的getLength()方法可以获取bookList的长度
System.out.println("一共有" + nodeList.getLength() + "个节点");
//遍历每一个fieldInfo节点
for (int i = 0; i < nodeList.getLength(); i++) {
Map<String,String> map = new HashMap<>();
String key = "";
xmlField = new XmlField();
System.out.println("-------------------遍历第" + (i + 1) + "个节点-------------------");
//通过 item(i)方法 获取一个fieldInfo节点
Node fieldInfo = nodeList.item(i);
/* 前端<fieldInfo>标签未设置id 下面代码获取不到id所以注释掉 例如 <<fieldInfo id="f1"> 下面代码可以获取到属性名id和属性值f1
//获取fieldInfo节点的所有属性集合
NamedNodeMap attrs = fieldInfo.getAttributes();
System.out.println("第 " + (i + 1) + "个节点共有" + attrs.getLength() + "个属性");
//遍历fieldInfo的属性
for (int j = 0; j < attrs.getLength(); j++) {
//通过item(index)方法获取fieldInfo节点的某一个属性
Node attr = attrs.item(j);
//获取属性名
System.out.print("属性名:" + attr.getNodeName());
//获取属性值
System.out.println("--属性值" + attr.getNodeValue());
}
*/
//解析fieldInfo节点的子节点
NodeList fieldInfoNodes = fieldInfo.getChildNodes();
//遍历childNodes获取每个节点的节点名和节点值
System.out.println("第"+(i+1)+"个节点共有"+fieldInfoNodes.getLength()+"个子节点");
for (int l = 0; l < fieldInfoNodes.getLength(); l++) {
//区分出text类型的node以及element类型的node
if (fieldInfoNodes.item(l).getNodeType() == Node.ELEMENT_NODE) {
//获取了element类型节点的节点名
System.out.print("第" + (l + 1) + "个节点的节点名:"
+ fieldInfoNodes.item(l).getNodeName());
//获取了element类型节点的节点值
System.out.println(" 节点值是:" + fieldInfoNodes.item(l).getFirstChild().getNodeValue());
//System.out.println(" 节点值是:" + childNodes.item(k).getTextContent());
String nodeName = fieldInfoNodes.item(l).getNodeName();
//对比fieldEnName里字段是否一致
if ("fieldEnName".equals(nodeName)){
//获取fieldEnName的Value 将value值赋予key
key = fieldInfoNodes.item(l).getFirstChild().getNodeValue();
map.put(key,"");
}
//对比fieldContent里字段是否一致
if ("fieldContent".equals(nodeName)) {
//获取fieldInfoNodes的Value
map.put(key, fieldInfoNodes.item(l).getFirstChild().getNodeValue());
}
}
}
xmlField.setAlarmId(map.get("alarmId"));
xmlField.setSheetNo(map.get("sheetNo"));
list.add(xmlField);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}