Java 解析 XML
来源:互联网 发布:js分割反斜杠字符串 编辑:程序博客网 时间:2024/06/07 10:33
由W3C提供的接口,它将整个XML文档读入内存,构建一个DOM树来对各个节点(Node)进行操作。
示例代码:
示例代码:
后文代码中有使用到text.xml(该文档放在src路径下,既编译后在classes路径下),都是指该xml文档。
- package test.xml;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.transform.Transformer;
- import javax.xml.transform.TransformerConfigurationException;
- import javax.xml.transform.TransformerException;
- import javax.xml.transform.TransformerFactory;
- import javax.xml.transform.dom.DOMSource;
- import javax.xml.transform.stream.StreamResult;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
- import org.w3c.dom.Text;
- import org.xml.sax.SAXException;
- /**
- * dom读写xml
- * @author whwang
- */
- public class TestDom {
- public static void main(String[] args) {
- read();
- //write();
- }
- publicstaticvoid read() {
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- try {
- DocumentBuilder builder = dbf.newDocumentBuilder();
- InputStream in = TestDom.class.getClassLoader().getResourceAsStream("test.xml");
- Document doc = builder.parse(in);
- // root <university>
- Element root = doc.getDocumentElement();
- if (root ==null)return;
- System.err.println(root.getAttribute("name"));
- // all college node
- NodeList collegeNodes = root.getChildNodes();
- if (collegeNodes ==null)return;
- for(int i =0; i < collegeNodes.getLength(); i++) {
- Node college = collegeNodes.item(i);
- if (college !=null && college.getNodeType() == Node.ELEMENT_NODE) {
- System.err.println("\t" + college.getAttributes().getNamedItem("name").getNodeValue());
- // all class node
- NodeList classNodes = college.getChildNodes();
- if (classNodes ==null)continue;
- for (int j = 0; j < classNodes.getLength(); j++) {
- Node clazz = classNodes.item(j);
- if (clazz != null && clazz.getNodeType() == Node.ELEMENT_NODE) {
- System.err.println("\t\t" + clazz.getAttributes().getNamedItem("name").getNodeValue());
- // all student node
- NodeList studentNodes = clazz.getChildNodes();
- if (studentNodes == null) continue;
- for (int k = 0; k < studentNodes.getLength(); k++) {
- Node student = studentNodes.item(k);
- if (student != null && student.getNodeType() == Node.ELEMENT_NODE) {
- System.err.print("\t\t\t" + student.getAttributes().getNamedItem("name").getNodeValue());
- System.err.print(" " + student.getAttributes().getNamedItem("sex").getNodeValue());
- System.err.println(" " + student.getAttributes().getNamedItem("age").getNodeValue());
- }
- }
- }
- }
- }
- }
- } catch (ParserConfigurationException e) {
- e.printStackTrace();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (SAXException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static void write() {
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- try {
- DocumentBuilder builder = dbf.newDocumentBuilder();
- InputStream in = TestDom.class.getClassLoader().getResourceAsStream("test.xml");
- Document doc = builder.parse(in);
- // root <university>
- Element root = doc.getDocumentElement();
- if (root ==null)return;
- // 修改属性
- root.setAttribute("name","tsu");
- NodeList collegeNodes = root.getChildNodes();
- if (collegeNodes !=null) {
- for (int i = 0; i <collegeNodes.getLength() -1; i++) {
- // 删除节点
- Node college = collegeNodes.item(i);
- if (college.getNodeType() == Node.ELEMENT_NODE) {
- String collegeName = college.getAttributes().getNamedItem("name").getNodeValue();
- if ("c1".equals(collegeName) ||"c2".equals(collegeName)) {
- root.removeChild(college);
- } else if ("c3".equals(collegeName)) {
- Element newChild = doc.createElement("class");
- newChild.setAttribute("name","c4");
- college.appendChild(newChild);
- }
- }
- }
- }
- // 新增节点
- Element addCollege = doc.createElement("college");
- addCollege.setAttribute("name","c5");
- root.appendChild(addCollege);
- Text text = doc.createTextNode("text");
- addCollege.appendChild(text);
- // 将修改后的文档保存到文件
- TransformerFactory transFactory = TransformerFactory.newInstance();
- Transformer transFormer = transFactory.newTransformer();
- DOMSource domSource = new DOMSource(doc);
- File file = new File("src/dom-modify.xml");
- if (file.exists()) {
- file.delete();
- }
- file.createNewFile();
- FileOutputStream out = new FileOutputStream(file);
- StreamResult xmlResult =new StreamResult(out);
- transFormer.transform(domSource, xmlResult);
- System.out.println(file.getAbsolutePath());
- } catch (ParserConfigurationException e) {
- e.printStackTrace();
- } catch (SAXException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (TransformerConfigurationException e) {
- e.printStackTrace();
- } catch (TransformerException e) {
- e.printStackTrace();
- }
- }
- }
- 该代码只要稍做修改,即可变得更加简洁,无需一直写if来判断是否有子节点。
- [xml]java解析xml ,怀旧
- java解析xml 克隆xml
- Java解析XML (DOM解析XML)
- xml解析---Java解析xml文件
- java 解析 xml文件
- java 解析xml
- JAVA解析XML DOM
- java如何解析xml
- JAVA解析XML DOM
- java 解析XML
- JAVA解析xml
- java解析xml字符串
- Java解析XML文档
- JAVA 解析XML文档
- JAVA解析XML DOM
- java解析Xml
- java jdom 解析xml
- java解析XML
- Android的Handler总结
- Android中的记住密码功能与多应用的单点登录
- JavaPreview类的使用(预览Java代码)
- hibernate主键生成策略
- 学习struts2建bbs总结六:hibernate分页查询的问题--分页后程序定时无响应
- Java 解析 XML
- 日本电子企业衰退的主因:忽视用户体验
- hdu_4379 The More The Better (想法题)
- 自定义应用如何影响客户信用额度
- 网络工具之tcpdump
- 小米二代真的性价碉堡了
- dispaly属性
- android 界面布局
- paip.提升安全性------本机硬件绑定