java中dom解析xml

从xml文件中得到某个节点中value的值,条件是已知道某一个子节点的参数,如下一片段,

已知 <name> 为 “Motor hand”的值,想从整个xml文件中得到此子节点的<value>所对应的值。

“<field>
<name>Motor hand</name>
<value>Right</value>
<type>Dotted</type>
</field>”

此方法是dom 遍历,获取大的节点并解析出子节点并属性和值一起存入到map中,将所有大节点再加入到链表中以备之后的其他程序调用(另附,从文件读取xml文件的方法):

 1 public static void main(String[] args)
 2     {        //"strxml"是 xml 转的string,  是个完整的xml对应的字符串, 3      String result=findbynode(strxml,"field","name","Motor hand","value");
 4      System.out.print(result);

 5     //得到的结果是“Right”

 6 
 7
 8     }
 9
10 /**
11  * common method "findbynode" get target from Xml 2
12  *
13  * @param args example:
14  *
15  * {
16  * <field>     //field-->bignode
17  *    <name>Motor hand</name> //name-->clum1 , "Motor hand"-->itemvalue
18  *    <value>Right</value>    //value-->clum2
19  *    <type>Dotted</type>
20  * </field>
21  *  }
22  *
23  */
24 public static String  findbynode(String passxmlstr,String bignode,String clum1,String itemvalue,String clum2)
25 {
26     String result="";
27
28     /*
29     bignode="field";
30     clum1="name";
31     clum2="value";
32     */
33
34     ArrayList<Map> al=paserxmlbynode(passxmlstr,bignode);
35     for(Map m : al)
36     {
37          if(m.get(clum1).toString().equals(itemvalue))
38          {
39              result=m.get(clum2).toString();
40              break;
41          }
42     }
43     //System.out.println(result);
44     return result;
45 }
46
47 public static ArrayList paserxmlbynode(String passxmlstr,String bignode)
48 {
49      Document xmlDoc=null;
50
51      try {
52             ByteArrayInputStream bis = new ByteArrayInputStream(passxmlstr.getBytes("UTF-8"));
53             xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(bis);
54         } catch (Throwable e) {
55             try {
56                 throw new Exception("MSG_COULDN‘T_PARSE_XML", e);
57             } catch (Exception e1) {
58                 // TODO Auto-generated catch block
59                 e1.printStackTrace();
60             }
61         }
62
63          //   System.out.print(passxmlstr);
64         ArrayList<Map> listitem=new ArrayList<Map>();
65
66         // find bignode
67         NodeList nlds=xmlDoc.getElementsByTagName(bignode);
68         int size =nlds.getLength();
69         for(int j=0;j<size;j++)
70         {
71             Node nd=nlds.item(j).getFirstChild().getNextSibling();
72             Map<String,String> map=new HashMap<String,String>();
73             while(nd!=null)
74             {
75                 map.put(nd.getNodeName(), nd.getFirstChild().getNodeValue());
76                 nd= nd.getNextSibling().getNextSibling();
77             }
78             listitem.add(map);
79         }
80
81        // System.out.print(listitem.size());
82      return listitem;
83 }
84    

附:从文件读取xml文件

 1     public String getStringofxmlfromdisk()
 2     {
 3         String passxmlstr = "";
 4         String filepath="D:\\test\\rxml.xml";
 5
 6         BufferedReader reader = null;
 7         try {
 8             reader = new BufferedReader(new FileReader(new File(filepath)));
 9             String tempString = null;
10             int line = 1;
11             while ((tempString = reader.readLine()) != null) {
12                 passxmlstr += tempString;
13                 line++;
14             }
15             // System.out.println("  " + passxmlstr);
16             reader.close();
17         } catch (IOException e) {
18             e.printStackTrace();
19         } finally {
20             if (reader != null) {
21                 try {
22                     reader.close();
23                 } catch (IOException e1) {
24                 }
25             }
26         }
27         return passxmlstr;
28     }

java中dom解析xml

时间: 2024-10-10 04:45:38

java中dom解析xml的相关文章

Java中Dom解析xml文档

xml文档 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <name>你好</name> <author>李四</author> <price>80</price> </book> <book id="2"> &l

Java中Dom解析xml的一个实例

package com.xd.test; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class test { public static void main(String[]

Java通过DOM解析XML

1 package com.gcli.xml; 2 3 import java.io.IOException; 4 5 import javax.xml.parsers.DocumentBuilder; 6 import javax.xml.parsers.DocumentBuilderFactory; 7 import javax.xml.parsers.ParserConfigurationException; 8 9 import org.w3c.dom.Document; 10 impo

java中的xml简介与DOM解析xml

1. xml简介 XML:指可扩展标记语言, Extensible Markup Language:类似HTML.XML的设计宗旨是传输数据,而非显示数据. 一个xml文档实例: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <company name="Tencent" address="深圳市南山区"> 3 <department deptNo=&quo

JAVA中使用DOM解析XML文件

JAVA中使用DOM解析XML文件: 创建DocumentBuilderFactory的对象                                 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 创建DocumentBuilder对象 通过documentBuilder对象的parser方法加载xml文件到当前项目下 获取所有XML文件内节点的集合    getElementsByTagName()方

org.w3c.dom(java dom)解析XML文档

位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 2.解析器:DocumentBuilder 创建方法:通过解析器工厂类来获得 DocumentBu

JAva使用DOM读取XML数据(解析)

原来一切都是有套路的 使用DOM解析XML文档步骤 1.创建解析器工厂对象 DocumentBuildFactory对象 2.由解析器工厂对象创建解析器对象,即DocumentBuilder对象 3.由解析器对象对指定XML文件进行解析,构建相应的DOM树,创建Document对象,生成一个Document对象 4.以Document对象为起点对DOM树的节点进行查询 5.使用Document的getElementsByTagName方法获取元素名称,生成一个NodeList集合, 6.遍历集合

java DOM解析xml文件出现#text节点解决方案

java DOM解析xml文件出现#text节点解决方案 原生java解析xml的方法提供了两个,DocumentBuilder 和 SAXParser. 试了第一个DOM方法,在解析输出节点过程中,getNodeName()输出节点名发现多出了几个#text节点. text.xml <?xml version="1.0" encoding="UTF-8"?> <!-- xml解析测试文件 --> <LData> <ldat

Java从零开始学四十二(DOM解析XML)

一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <PhoneInfo name="手机品牌"> <Brand name="华为"> <Type name="U8650"> </Type> </Brand