首页 > 代码库 > 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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。