java读取解析xml文件实例
更新时间:2023-11-26XML文件格式介绍
在进行java读取解析XML文件之前,我们首先需要了解XML的文件格式和结构,确保我们能够准确地解析和处理XML文件。XML标签通常包含在一对尖括号中(类似于HTML),每个标签的名称和值由名称-值对表示。XML文件包含声明头(以 <?xml ?>开头),然后是文档根元素,它是XML文档中的第一个元素。
<?xml version="1.0" encoding="UTF-8" ?>John Doe A Java Tutorial Wiley 3 978-0470105554 John Smith Another Java Tutorial McGraw Hill 2 978-0072253609
使用DOM解析XML文件
我们可以使用Java内置的DOM类库来解析XML文件。DOM解析器会将整个XML文件加载到内存中,并将其表示为一个树形结构。我们可以遍历树来获取XML文件中的信息。下面是一个示例代码,它使用DOM解析器解析XML文件:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); // Load and parse XML file Document document = builder.parse(new File("catalog.xml")); // Get the document root element Element rootElement = document.getDocumentElement(); // Get a list of all book elements NodeList bookNodes = rootElement.getElementsByTagName("book"); // Iterate over book elements and print the author and title for (int i = 0; i < bookNodes.getLength(); i++) { Element bookElement = (Element) bookNodes.item(i); String author = bookElement.getElementsByTagName("author").item(0).getTextContent(); String title = bookElement.getElementsByTagName("title").item(0).getTextContent(); System.out.println("Book " + (i + 1) + ": " + author + " - " + title); }
使用SAX解析XML文件
SAX解析器与DOM解析器不同,它采用事件驱动的方式读取XML文件并触发事件。这种方式可以节省内存,并且对于大型XML文件非常有用,因为它不会一次性读取整个文件。下面是一个示例代码,它使用SAX解析器解析XML文件:
SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); DefaultHandler handler = new DefaultHandler() { boolean inAuthor = false; boolean inTitle = false; StringBuilder authorBuilder = new StringBuilder(); StringBuilder titleBuilder = new StringBuilder(); public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equalsIgnoreCase("author")) { inAuthor = true; } else if (qName.equalsIgnoreCase("title")) { inTitle = true; } } public void endElement(String uri, String localName, String qName) throws SAXException { if (qName.equalsIgnoreCase("author")) { inAuthor = false; } else if (qName.equalsIgnoreCase("title")) { inTitle = false; } if (qName.equalsIgnoreCase("book")) { System.out.println("Book: " + authorBuilder.toString() + " - " + titleBuilder.toString()); authorBuilder.setLength(0); titleBuilder.setLength(0); } } public void characters(char[] ch, int start, int length) throws SAXException { if (inAuthor) { authorBuilder.append(new String(ch, start, length)); } else if (inTitle) { titleBuilder.append(new String(ch, start, length)); } } }; // Parse XML file parser.parse(new File("catalog.xml"), handler);
使用JAXB解析XML文件
JAXB是Java Architecture for XML Binding的缩写,它是Java EE的一部分,提供了将Java类映射到XML文档的功能。JAXB通过生成Java类来实现它,这些类可以自动读入和写出XML文件。下面是一个示例代码,它使用JAXB解析XML文件:
JAXBContext context = JAXBContext.newInstance(Catalog.class); Unmarshaller unmarshaller = context.createUnmarshaller(); // Unmarshal XML file Catalog catalog = (Catalog) unmarshaller.unmarshal(new File("catalog.xml")); // Iterate over books in the catalog for (Book book : catalog.getBooks()) { System.out.println("Book: " + book.getAuthor() + " - " + book.getTitle()); }