xml解析之DOM
DOM Document Object Model 文档对象模型
如果一个程序需要进行DOM解析读操作的话,需要按照如下的步骤进行
建立DocumentBuilderFactory DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
建立DocumentBuilder DocumentBuilder builder = factory.newDocumentBuilder();
建立Document Document doc = builder.parse("要读取的文件路径");
建立NodeList NodeList nl = doc.getElementsByTagName("读取节点");
进行xml信息读取。
要解析文件——d:\dom_demo_02.xml
<?xml version="1.0" encoding="GBK"?> <addresslist> <name>张三</name> </addresslist>
读取结点:
public class DOMDemo01 { public static void main(String[] args) { // 1、建立DocumentBuilderFactory,以用于取得DocumentBuilder DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 2、通过DocumentBuilderFactory取得DocumentBuilder DocumentBuilder builder = null; try { builder = factory.newDocumentBuilder(); } catch (ParserConfigurationException e) { e.printStackTrace(); } // 3、定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作 Document doc = null; try { // 读取指定路径的xml文件 doc = builder.parse("D:" + File.separator + " dom_demo_02.xml"); } catch (Exception e) { e.printStackTrace(); } // 4、查找name的节点 NodeList nl = doc.getElementsByTagName("name"); // 5、输出NodeList中第一个子节点中文本节点的内容 System.out.println("姓名:" + nl.item(0).getFirstChild().getNodeValue()); } }
定义要解析的XML文件 d:\dom_demo_02.xml:
<?xml version="1.0" encoding="GBK"?> <addresslist> <linkman> <name>张三</name> <email>[email protected]</email> </linkman> <linkman> <name>MLDN</name> <email>[email protected]</email> </linkman> </addresslist>
public class DOMDemo01 { public static void main(String[] args) { // 1、建立DocumentBuilderFactory,以用于取得DocumentBuilder DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 2、通过DocumentBuilderFactory取得DocumentBuilder DocumentBuilder builder = null; try { builder = factory.newDocumentBuilder(); } catch (ParserConfigurationException e) { e.printStackTrace(); } // 3、定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作 Document doc = null; try { // 读取指定路径的xml文件 doc = builder.parse("D:" + File.separator + " dom_demo_02.xml"); } catch (Exception e) { e.printStackTrace(); } // 4、查找linkman的节点 NodeList nl = doc.getElementsByTagName("linkman"); // 5、输出NodeList中第一个子节点中文本节点的内容 for (int x = 0; x < nl.getLength(); x++) { // 循环输出节点内容 Element e = (Element) nl.item(x) ;// 取得每一个元素 System.out.println("姓名:" + e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()); System.out.println("邮箱:" + e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue()); } } }
生成XML文件:
public class DOMDemo01 { public static void main(String[] args) { // 1、建立DocumentBuilderFactory,以用于取得DocumentBuilder DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 2、通过DocumentBuilderFactory取得DocumentBuilder DocumentBuilder builder = null; try { builder = factory.newDocumentBuilder(); } catch (ParserConfigurationException e) { e.printStackTrace(); } // 3、定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作 Document doc = null; doc = builder.newDocument(); // 创建一个新的文档 // 4、建立各个操作节点 Element addresslist = doc.createElement("addresslist") ;// 建立节点 Element linkman = doc.createElement("linkman") ; // 建立节点 Element name = doc.createElement("name") ; // 建立节点 Element email = doc.createElement("email") ; // 建立节点 // 5、设置节点的文本内容,即:为每一个节点添加文本节点 name.appendChild(doc.createTextNode("张三")) ; // 设置文本 email.appendChild(doc.createTextNode("[email protected]")) ;// 设置文本 // 6、设置节点关系 linkman.appendChild(name) ; // 子节点 linkman.appendChild(email) ; // 子节点 addresslist.appendChild(linkman) ; // 子节点 doc.appendChild(addresslist) ; // 文档上保存节点 // 7、输出文档到文件之中 TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = null; t = tf.newTransformer(); t.setOutputProperty(OutputKeys.ENCODING, "GBK") ; // 设置编码 DOMSource source = new DOMSource(doc); // 输出文档 StreamResult result = new StreamResult(new File("d:" + File.separator + "output.xml")); // 指定输出位置 t.transform(source, result); } }
相关推荐
Yakamoz 2020-05-26
与卿画眉共浮生 2020-10-14
xiyang 2020-08-21
XGQ 2020-07-04
Andrewjdw 2020-05-29
行吟阁 2020-05-18
88491874 2020-04-30
baijinswpu 2020-07-29
leonranri 2020-07-26
zhongliwen 2020-07-05
麋鹿麋鹿迷了路 2020-07-05
zengyu00 2020-07-05
CoderBoy 2020-06-28
whbing 2020-06-28
绝望的乐园 2020-06-27
wellfly 2020-06-26
菇星獨行 2020-06-25
草原孤狼 2020-06-25
坚持着执着 2020-06-16