最近新需求要解析xml格式的日志文件,解析完之后数据库落地。
经过度娘搜索,写了demo,现记录如下:
测试XML
<?xml version="1.0" encoding="UTF-8"?> <stus core-uuid = "4bc7e7f6-14db-11ea-b8e5-9fa46b26ed54" switchname="iZbp1i0fg2swiwfhc4zzqnZ"> <stu id="10086"> <name>张三</name> <age>18</age> <address>深圳</address> </stu> <stu id="10086"> <name>李四</name> <name>李五</name> <name>李六</name> <age>28</age> <address>北京</address> </stu> </stus>
JAVA类
public class Test{ private static String FilePath = "D:/NewFile.xml"; public static void analysisXml() { //1. 创建sax读取对象 SAXReader saxReader = new SAXReader(); //2. 指定解析的xml源 Document document = null; // 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。 // Document document = reader.read(new File("src/res/books.xml")); try { // document = saxReader.read(new URL("https://www.w3school.com.cn/example/xmle/note.xml")); // document = saxReader.read(new ByteArrayInputStream(FilePath.getBytes("UTF-8"))); document = saxReader.read(new File(FilePath)); } catch (Exception e1) { log.error("解析调用结果异常", e1); e1.printStackTrace(); } //3. 得到根元素 Element root = document.getRootElement(); System.out.println("=====父节点====="); System.out.println("rootgetName--"+root.getName()); System.out.println("rootattributeValue--"+root.attributeValue("core-uuid")); System.out.println("rootattributeValue--"+root.attributeValue("switchname")); System.out.println("rootgetPath--"+root.getPath()); System.out.println("rootgetNamespace--"+root.getNamespace()); System.out.println("roottoString--"+root.toString()); System.out.println("=====结束====="); // 通过element对象的elementIterator方法获取迭代器 Iterator it = root.elementIterator(); // 遍历迭代器,获取根节点中的信息(书籍) while (it.hasNext()) { System.out.println("=====开始遍历====="); Element element = (Element) it.next(); System.out.println("elementName::"+element.getName()); // 获取book的属性名以及 属性值 List<Attribute> attrs = element.attributes(); for (Attribute attr : attrs) { System.out.println("属性名:" + attr.getName() + "--属性值:" + attr.getValue()); } Iterator itt = element.elementIterator(); while (itt.hasNext()) { Element bookChild = (Element) itt.next(); System.out.println("节点名:" + bookChild.getName() + "--节点值:" + bookChild.getStringValue()); } System.out.println("=====结束遍历====="); } } public static void main(String[] args) { analysisXml(); } }
引用包
import java.io.File; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader;
输出结果
=====父节点===== rootgetName--stus rootattributeValue--4bc7e7f6-14db-11ea-b8e5-9fa46b26ed54 rootattributeValue--iZbp1i0fg2swiwfhc4zzqnZ rootgetPath--/stus rootgetNamespace--org.dom4j.Namespace@babe [Namespace: prefix mapped to URI ""] roottoString--org.dom4j.tree.DefaultElement@1700915 [Element: <stus attributes: [org.dom4j.tree.DefaultAttribute@21de60b4 [Attribute: name core-uuid value "4bc7e7f6-14db-11ea-b8e5-9fa46b26ed54"], org.dom4j.tree.DefaultAttribute@c267ef4 [Attribute: name switchname value "iZbp1i0fg2swiwfhc4zzqnZ"]]/>] =====结束===== =====开始遍历===== elementName::stu 属性名:id--属性值:10086 节点名:name--节点值:张三 节点名:age--节点值:18 节点名:address--节点值:深圳 =====结束遍历===== =====开始遍历===== elementName::stu 属性名:id--属性值:10086 节点名:name--节点值:李四 节点名:name--节点值:李五 节点名:name--节点值:李六 节点名:age--节点值:28 节点名:address--节点值:北京 =====结束遍历=====
参考地址:https://blog.csdn.net/myme95/article/details/94454324
参考地址:https://www.cnblogs.com/bingru/p/10438020.html