JAVA8 可以使用標(biāo)準(zhǔn)的 DOM 方式的 API 來編寫代碼解析 XML 文件,無需引入第三方依賴。下面是兩個測試用的 XML 文件:
test.xml
<allData>
<pan attr1="a" attr2="b">
1
</pan>
<tilt>
2
</tilt>
<zoom>
3
</zoom>
<list>
<item>
item0
</item>
<item>item1</item>
<item>item2</item>
</list>
<user-list>
<user>
<name>
張三
</name>
<gender>
男
</gender>
</user>
<user>
<name>
高啟蘭
</name>
<gender>
女
</gender>
</user>
</user-list>
</allData>
test2.xml
<allData>
<pan attr1="a" >
1
</pan>
<zoom>
3
</zoom>
<list>
<item>
item0
</item>
<item>item1</item>
<item>item2</item>
</list>
</allData>
負(fù)責(zé)接收所有信息的 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 List<String> list = new ArrayList<>();
private String panAttr1;
private String panAttr2;
private List<AllDataUserDTO> 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<AllDataUserDTO> getUserList() {
return userList;
}
public void setUserList(List<AllDataUserDTO> userList) {
this.userList = userList;
}
public List<String> getList() {
return list;
}
public void setList(List<String> 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;
}
}
負(fù)責(zé)接收用戶信息的 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();//創(chuàng)建一個DocumentBuilderFactory的對象
DocumentBuilder builder;
AllDataDTO allDataDTO = null;
try {
builder = factory.newDocumentBuilder();//創(chuàng)建一個DocumentBuilder對象
Document doc = builder.parse("file:///" + xmlFilePath);
Element root = doc.getDocumentElement();//獲取根節(jié)點(diǎn)
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文章來源:http://www.zghlxwxcb.cn/news/detail-815770.html
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);
}
}
輸出結(jié)果:文章來源地址http://www.zghlxwxcb.cn/news/detail-815770.html
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=[]}
到了這里,關(guān)于【196】JAVA8 用 DOM 方式的 API 解析XML文件,無需引入第三方依賴。的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!