{site_name}

{site_name}

🌜 搜索

Java解析XML文档的常用方法有以下几种:

1. DOM(Doc

编程 𝄐 0
java解析xml文件的三种方式,java xml解析一般用哪种方法,java解析xml配置文件,java解析xml文件的几种方式,java解析xml常用方式,java怎么解析xml文件
Java解析XML文档的常用方法有以下几种:

1. DOM(Document Object Model)方式:将整个XML文档读入内存并以树状结构进行操作,适合于对XML文档进行增删改查等复杂操作。

示例代码:

java
// 创建DocumentBuilderFactory实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
// 创建DocumentBuilder实例
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML文件,得到Document对象
Document doc = builder.parse(new File("example.xml"));
// 获取根节点
Element root = doc.getDocumentElement();
// 遍历子节点
NodeList nodeList = root.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
// 输出节点名和节点值
System.out.println(element.getNodeName() + ":" + element.getTextContent());
}
}
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}


2. SAX(Simple API for XML)方式:按顺序读取XML文档,适合于只需要获取部分数据而不需要修改的情况。

示例代码:

java
// 创建SAXParserFactory实例
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
// 创建SAXParser实例
SAXParser parser = factory.newSAXParser();
// 自定义Handler处理XML数据
DefaultHandler handler = new DefaultHandler() {
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// 输出节点名和属性值
System.out.print(qName + ": ");
for (int i = 0; i < attributes.getLength(); i++) {
String attrName = attributes.getQName(i);
String attrValue = attributes.getValue(i);
System.out.print(attrName + "=" + attrValue + " ");
}
System.out.println();
}
public void characters(char[] ch, int start, int length) throws SAXException {
// 输出节点值
System.out.println(new String(ch, start, length));
}
};
// 解析XML文件
parser.parse(new File("example.xml"), handler);
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}


3. JAXB(Java Architecture for XML Binding)方式:通过注解将XML文档转换成Java对象,适合于需要将XML与Java对象互相转换的情况。

示例代码:

xml
<!-- example.xml -->
<root>
<person id="1">
<name>Tom</name>
<age>20</age>
</person>
<person id="2">
<name>Jerry</name>
<age>18</age>
</person>
</root>


java
// 创建JAXBContext实例
JAXBContext context = JAXBContext.newInstance(Root.class);
// 创建Unmarshaller实例
Unmarshaller unmarshaller = context.createUnmarshaller();
// 将XML文档转换成Java对象
Root root = (Root) unmarshaller.unmarshal(new File("example.xml"));
// 输出Java对象内容
for (Person person : root.getPersonList()) {
System.out.println(person.getId() + ": " + person.getName() + ", " + person.getAge());
}


java
// Root.java
@XmlRootElement(name = "root")
public class Root {
@XmlElement(name = "person")
private List<Person> personList;
// getter and setter
}

// Person.java
public class Person {
@XmlAttribute
private int id;
@XmlElement
private String name;
@XmlElement
private int age;
// getter and setter
}