首页 > 代码库 > java中dom解析xml

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 212  * 13  * @param args example:14  * 15  * {16  * <field>     //field-->bignode17  *    <name>Motor hand</name> //name-->clum1 , "Motor hand"-->itemvalue18  *    <value>Right</value>    //value-->clum219  *    <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 block59                 e1.printStackTrace();60             }61         }62         63          //   System.out.print(passxmlstr);64         ArrayList<Map> listitem=new ArrayList<Map>();   65         66         // find bignode67         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     }