欢迎访问宙启技术站
智能推送

使用Java函数实现XML文件的解析和生成

发布时间:2023-05-19 23:36:42

XML是(可扩展标记语言)是一种标记语言,有扩展性和可适应性,是非常常用的数据交换格式。Java作为一种表现力强的编程语言,也提供了强大的XML解析和生成功能。在Java中,可以使用许多库和框架来解析和生成XML文件。这篇文章将介绍如何使用Java函数来实现XML文件的解析和生成,以及介绍一些常用的Java函数、库和框架。

Java函数实现XML解析

在Java中,可以使用DOM、SAX、JDOM等库来解析XML文件。

- 使用DOM解析XML文件

DOM (文档对象模型)是一种基于树的API,用于解析XML文件。DOM将整个XML文档作为一个树形结构在内存中进行操作,可以通过节点或元素进行访问。DOM将XML文件转换为一个持久对象,允许在树形结构中访问、修改和排列元素。下面是一个使用DOM解析XML文件的示例:

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;

import java.io.File;

import java.io.IOException;

public class DOMParserExample {

public static void main(String[] args) {

try {

      File inputFile = new File("input.xml");

      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

      Document doc = dBuilder.parse(inputFile);

      doc.getDocumentElement().normalize();

      System.out.println("根元素: " + doc.getDocumentElement().getNodeName());

      NodeList nList = doc.getElementsByTagName("student");

      System.out.println("-----------------------");

      for (int temp = 0; temp < nList.getLength(); temp++) {

         Node nNode = nList.item(temp);

         System.out.println("

当前元素 :" + nNode.getNodeName());

         if (nNode.getNodeType() == Node.ELEMENT_NODE) {

            Element eElement = (Element) nNode;

            System.out.println("学号 : " 

               + eElement.getAttribute("id"));

            System.out.println("姓名 : " 

               + eElement.getElementsByTagName("name")

                  .item(0)

                  .getTextContent());

            System.out.println("分数 : " 

               + eElement.getElementsByTagName("score")

                  .item(0)

                  .getTextContent());

         }

      }

    } catch (Exception e) {

      e.printStackTrace();

    }

}

}

- 使用SAX解析XML文件

SAX (简单API for XML)是一种基于事件的API,用于解析XML文件。SAX不将整个文档加载到内存中,而是在解析过程中逐个节点地进行处理。SAX处理速度快,但不支持文档修改操作。下面是一个使用SAX解析XML文件的示例:

import java.io.File;

import java.io.IOException;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

public class SAXParserExample {

public static void main(String[] args) {

try {

      File inputFile = new File("input.xml");

      SAXParserFactory factory = SAXParserFactory.newInstance();

      SAXParser saxParser = factory.newSAXParser();

      UserHandler userhandler = new UserHandler();

      saxParser.parse(inputFile, userhandler);     

    } catch (Exception e) {

      e.printStackTrace();

    }

}

}

class UserHandler extends DefaultHandler {

boolean bId = false;

boolean bName = false;

boolean bScore = false;

@Override

public void startElement(String uri, 

         String localName, String qName, Attributes attributes)

         throws SAXException {

if (qName.equalsIgnoreCase("STUDENT")) {

String id = attributes.getValue("id");

         System.out.println("学号 : " + id);

} else if (qName.equalsIgnoreCase("NAME")) {

bName = true;

} else if (qName.equalsIgnoreCase("SCORE")) {

bScore = true;

}

}

@Override

public void endElement(String uri, 

String localName, String qName) throws SAXException {

// TODO Auto-generated method stub

if (qName.equalsIgnoreCase("STUDENT")) {

System.out.println("-----------------------");

}

@Override

public void characters(char ch[], int start, int length) throws SAXException {

if (bName) {

System.out.println("姓名: " + new String(ch, start, length));

bName = false;

} else if (bScore) {

System.out.println("分数: " + new String(ch, start, length));

bScore = false;

}

}

}

- 使用JDOM解析XML文件

JDOM是一种基于树的API,用于解析XML文件。JDOM提供了简单而直观的API,与DOM相比更容易使用。下面是一个使用JDOM解析XML文件的示例:

import java.io.File;

import java.io.IOException;

import org.jdom2.Document;

import org.jdom2.Element;

import org.jdom2.JDOMException;

import org.jdom2.input.SAXBuilder;

public class JDOMParserExample {

public static void main(String[] args) {

try {

SAXBuilder builder = new SAXBuilder();

File inputFile = new File("input.xml");

Document document = builder.build(inputFile);

Element rootNode = document.getRootElement();

System.out.println("根元素: " + rootNode.getName());

List<Element> studentList = rootNode.getChildren("student");

for (int i = 0; i < studentList.size(); i++) {

Element student = (Element) studentList.get(i);

System.out.println("-----------------------");

System.out.println("学号 : " + student.getAttributeValue("id"));

System.out.println("姓名 : " + student.getChildText("name"));

System.out.println("分数 : " + student.getChildText("score"));

}

} catch (IOException io) {

System.out.println(io.getMessage());

} catch (JDOMException jdomex) {

System.out.println(jdomex.getMessage());

}

}

}

Java函数实现XML生成

在Java中,可以使用DOM、SAX、JDOM、StAX等库来生成XML文件。

- 使用DOM生成XML文件

使用DOM生成XML文件需要构建整个XML文档的树形结构,并将其写入文件中。下面是一个使用DOM生成XML文件的示例:

import java.io.File;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.DocumentBuilder;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Text;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.Result;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.stream.StreamResult;

public class DOMWriter {

public static void main(String[] args) {

try {

      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

      Document doc = dBuilder.newDocument();

      Element rootElement = doc.createElement("students");

      doc.appendChild(rootElement);

      Element student = doc.createElement("student");

      rootElement.appendChild(student);

      student.setAttribute("id", "001");

      Element name = doc.createElement("name");

      name.appendChild(doc.createTextNode("张三"));

      student.appendChild(name);

      Element score = doc.createElement("score");

      score.appendChild(doc.createTextNode("90"));

      student.appendChild(score);

      TransformerFactory transformerFactory = TransformerFactory.newInstance();

      Transformer transformer = transformerFactory.newTransformer();

      DOMSource source = new DOMSource(doc);

      Result result = new StreamResult(new File("output.xml"));

      transformer.transform(source, result);

    } catch (Exception e) {

      e.printStackTrace();

    }

}

}

- 使用SAX生成XML文件

使用SAX生成XML文件需要实现ContentHandler接口,并在回调方法中编写XML生成逻辑。下面是一个使用SAX生成XML文件的示例:

import java.io.File;

import java.io.FileOutputStream;

import javax.xml.transform.OutputKeys;

import javax.xml.transform.sax.SAXTransformerFactory;

import javax.xml.transform.sax.TransformerHandler;

import javax.xml.transform.stream.StreamResult;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.AttributesImpl;

import org.xml.sax.helpers.DefaultHandler;

public class SAXWriter extends DefaultHandler {

private TransformerHandler handler = null;

private AttributesImpl attributes = null;

public void create