Document document=new SAXReader.reader(“xml文路径/文件名xxx.xml”);//得到Document对象
Element root = document.getRootElement()//获得根节点
Iterator iterator=root.elementIterator(); //从根节点遍历子节点
Iterator iterator=Element.elementIterator(); //再从子节点在遍历其子节点
对节点访问其属性用:Attribute leaderAttr =Element. attribute(“xxx”);
对节点访问其某个属性leaderAttr的名称:leaderAttr.getName();
对节点访问其某个属性leaderAttr的值:leaderAttr.getValue()
对节点访问其名称:Element.getName();
对节点访问其文本:Element. getText();
attributeValue(QName qname):通过指定qualified name获得属性值,如果无法找到指定的属性,则返回null。
attributeValue(QName qname, String defaultValue):通过指定qualified name获得属性值,如果无法找到指定的属性,则返回defaultValue。
attributeValue(String name):通过指定local name获得属性值,而忽略属性的namespace,如果无法找到指定的属性,则返回null。
attributeValue(String name, String defaultValue):通过指定local name获得属性值,而忽略属性的namespace,如果无法找到指定的属性,则返回defaultValue。
要解析的 XML
1.<?xml version="1.0" encoding="utf-8"?>
2.<root>
3. <request type="Pending" flowType="GENERAL" flowName="报销流程"
4. docId="185647" flowId="16409" nodeName="报销人确认" wikId="58288"
5. sendId="1210040" userId="1210040" createDate="2009-12-03"
6. title="费用报销 " flowCreaterId="1210040" nodeType="1"
7. bosTime="2009-12-03 09:36:15">
8. <pro type="att"></pro>
9. <pro type="textarea" name="OP_bxryj" title="处理意见" need="true"></pro>
10. </request>
11.</root>
解析代码:
1.public void parseApplicationConfigXML(){
2. try {
3. SAXReader sax = new SAXReader();
4. Document xmlDoc = sax.read(new File("E:\\20090316HPS\\Dom4jTest\\t.xml"));
5. Element root = xmlDoc.getRootElement();//根节点
6. Iterator it = root.elementIterator("request");
7. while(it.hasNext()){
8. Element request = (Element)it.next();
9. System.out.println(request.getName());
10. System.out.println(request.attributeValue("type"));
11. System.out.println(request.attributeValue("flow"));
12. System.out.println(request.attributeValue("time"));
13.
14. }
15. System.out.println("-------------------------------------------");
16. List list = root.selectNodes("//pro");
17. for(int i = 0; i < list.size(); i++){
18. Element pro = (Element)list.get(i);
19. System.out.println(pro.getName());
20. System.out.println(pro.attributeValue("type"));
21. System.out.println(pro.attributeValue("name"));
22. System.out.println(pro.getText());
23. System.out.println("+++++++++++++++++++++++++++++++++");
24. }
25. } catch (DocumentException e) {
26. // TODO Auto-generated catch block
27. e.printStackTrace();
28. }
29. }
修改代码:
public String getApplcationConfigFromXMLTest(){
2. String value = "";
3. try {
4. SAXReader sax = new SAXReader();
5. Document xmlDoc = sax.read(new File(this.UBSSDIC_PATH));
6. Element root = xmlDoc.getRootElement();//根节点
7. Iterator it = root.elementIterator();
8. while(it.hasNext()){
9. Element ele = (Element)it.next();
10. Attribute attribute = ele.attribute("type");
11. if(attribute.getStringValue().equals("Pending")){
12. attribute.setValue("sendread2");//修改属性节点的值
13. }
14.
15. Attribute flowType = ele.attribute("flowType");
16. flowType.detach();//删除某个属性
17.
18. ele.addAttribute("type", "Pending");//添加一个属性节点
19. }
20. Element new_cdata = root.addElement("new_cdata");//添加一个元素
21. new_cdata.addCDATA("tst&ree");
22.
23. Element new_ele = root.addElement("new_ele");//添加一个元素
24. new_ele.addText("33434343");
25.
26. Element obj = (Element)root.selectObject("//pro[@type='att']");//根据XPath查找元素
27. obj.setText("测试dddddd");//修改元素的值 即text节点
28. //输出全部原始数据,在编译器中显示
29. OutputFormat format = OutputFormat.createPrettyPrint();
30. format.setEncoding("GBK");
31. XMLWriter writer = new XMLWriter(System.out, format);
32. writer.write(xmlDoc);
33. writer.close();
34. // 输出全部原始数据,并用它生成新的我们需要的XML文件
35. XMLWriter writer2 = new XMLWriter(new FileWriter(new File(
36. "test.xml")), format);
37. writer2.write(xmlDoc); //输出到文件
38. writer2.close();
39. } catch (DocumentException e) {
40. System.out.println(e.getMessage());
41. e.printStackTrace();
42. }catch(IOException e){
43. e.printStackTrace();
44. }
45. return value ;
46.}
生成XML:
1.public void createApplicationConfigXML(){
2. //建立document对象
3. try {
4. Document document = DocumentHelper.createDocument();
5. Element root = document.addElement("root");//添加文档根
6. root.addComment("这个一个注释");//加入一行注释
7. Element request = root.addElement("request"); //添加root的子节点
8. request.addAttribute("type", "cat");
9. request.addAttribute("flow", "tong");
10. request.addAttribute("time", "2009");
11. Element pro = request.addElement("pro");
12. pro.addAttribute("type", "att");
13. pro.addAttribute("name", "附件");
14. pro.addText("测试哈子");
15.
16. Element cd = request.addElement("pro");
17. cd.addAttribute("type", "cd");
18. cd.addAttribute("name", "特殊字符过滤");
19. cd.addCDATA("特殊字符");
20.
21. //输出全部原始数据,在编译器中显示
22. OutputFormat format = OutputFormat.createPrettyPrint();
23. format.setEncoding("GBK");//根据需要设置编码
24. XMLWriter writer = new XMLWriter(System.out, format);
25. document.normalize();
26. writer.write(document);
27. writer.close();
28. // 输出全部原始数据,并用它生成新的我们需要的XML文件
29. XMLWriter writer2 = new XMLWriter(new FileWriter(new File(
30. "test.xml")), format);
31. writer2.write(document); //输出到文件
32. writer2.close();
33. } catch (UnsupportedEncodingException e) {
34. // TODO Auto-generated catch block
35. e.printStackTrace();
36. } catch (IOException e) {
37. // TODO Auto-generated catch block
38. e.printStackTrace();
39. }
40. }
|