• 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.containsKey(clum1)&&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     }
  • 相关阅读:
    Linux中chown和chmod的区别和用法(转)
    一个小时学会Git
    核心团队的信任和默契——超越管理
    一个项目怎么开发出来
    产品经理职责
    从技术到管理:思维转变是关键
    可扩展Web架构与分布式系统
    浅谈大型web系统架构
    亿级Web系统搭建——单机到分布式集群
    Docker容器进入的4种方式
  • 原文地址:https://www.cnblogs.com/rojas/p/3919465.html
Copyright © 2020-2023  润新知