java解析XML

来源:互联网 发布:海德汉系统编程指令 编辑:程序博客网 时间:2024/05/18 03:47
Java解析XML文件:常规的两种方式:dom4j方式+jdom方式1.要解析的xml文件Xml代码  <?xml version="1.0" encoding="utf-8"?>  <books>      <book name="ThinkInJava">          <language>english</language>          <price>60.0</price>      </book>      <book name="Java编程思想">          <language>chinese</language>          <price>75.0</price>      </book>  </books>   2.dom4j方式:需要用dom4j.jar包Java代码  public class Dom4jXML {        public Dom4jXML() {      }        public void praseXML(String filePath) {          SAXReader reader = new SAXReader();// 创建一个能读取xml文档的reader          Document document;// 构建一个文档对象,用来将xml转换成Document对象          try {              document = reader.read(new FileInputStream(new File(filePath)));// 从给定的文件中读取xml并且构建成Document              Element rootElement = document.getRootElement();// 获得文档对象的根节点              List<Element> listElement = rootElement.elements();// 获得根节点下面所有的子节点              for (Element e : listElement) {// 遍历所有的子节点                  Element element = e;// 当前节点,也就是Book节点                  Attribute nameAttribute = element.attribute("name");// 得到当前节点的属性对象                  String nameString = nameAttribute.getValue();// 获得属性对象的值                  System.out.println(element.getName() + ":" + nameString);// 将节点信息输出                    Element languageElement = element.element("language");// 获得当前节点的language子节点                  System.out.println(languageElement.getName() + ":" + languageElement.getTextTrim());// 将language节点信息输出                    Element priceElement = element.element("price");                  System.out.println(priceElement.getName() + ":" + priceElement.getText());                    // 判断有没有出版年份节点,要是有就打印出来,要是没有就创建并且添加到Document对象中(添加节点)                  Element yearElement = element.element("year");                  if (yearElement == null) {                      yearElement = element.addElement("year");                      yearElement.setText("2014year");                  } else {                      System.out.println(yearElement.getName() + ":" + yearElement.getTextTrim());                  }                    // 通货膨胀,导致中国物价上涨,凡是汉语书籍涨价10.00元(修改节点)                  if (languageElement.getTextTrim().equals("chinese")) {                      String priceStr = priceElement.getTextTrim();                      double priceNum = Double.parseDouble(priceStr);                      priceNum += 10.00;                      priceElement.setText(priceNum + "");                  }                }              // 将修改以后的Document对象保存成xml到原来的地方              XMLWriter write = new XMLWriter(new FileWriter(filePath));              write.write(document);              write.close();          } catch (DocumentException e) {              e.printStackTrace();          } catch (IOException e1) {              e1.printStackTrace();          }      }        public static void main(String[] args) {          new Dom4jXML().praseXML("你自己的xml路径");      }  }   3.jdom方式:需要用到jdom.jar包Java代码  public class JdomXML {      public JdomXML() {      }        public void parseXML(String filePath) {          SAXBuilder builder = new SAXBuilder(false);// 用来读取xml文件          Document document;// 构建一个文档对象,用来将xml转换成Document对象          try {              document = builder.build(new FileInputStream(new File(filePath)));// 从给定的文件中读取xml并且构建成Document              Element elementRoot = document.getRootElement();// 获得文档对象的根节点              List<Element> elementList = elementRoot.getChildren("book");// 获得根节点下面所有的Book节点              for (Element e : elementList) {// 遍历Book节点                  Element element = e;// 当前的Book节点                  String name = element.getAttributeValue("name");// 获得Book节点的name属性                    Element languageElement = element.getChild("language");// 获得Book节点下的language子节点                  String language = languageElement.getValue();// 获得language节点的值                    Element priceElement = element.getChild("price");                  String price = priceElement.getValue();                    // 打印输出子节点相关信息                  System.out.println(element.getName() + ":" + name);                  System.out.println(languageElement.getName() + ":" + language);                  System.out.println(priceElement.getName() + ":" + price);                    // 判断有没有出版年份节点,要是有就打印出来,要是没有就创建并且添加到Document对象中(添加节点)                  Element yearElement = element.getChild("year");                  if (yearElement == null) {                      yearElement = new Element("year");                      yearElement.setText("2014year");                      element.addContent(yearElement);                  } else {                      System.out.println(yearElement.getName() + ":" + yearElement.getValue());                  }                    // 判断是不是外文书籍,要是外文书籍,就降价1.50元(修改节点)                  if (language.equals("english")) {                      double priceNum = Double.parseDouble(price);                      priceNum -= 1.50;                      priceElement.setText(priceNum + "");                  }              }              // 将修改以后的Document对象保存成xml到原来的地方              XMLOutputter outputter = new XMLOutputter();              outputter.output(document, new FileOutputStream(new File(filePath)));          } catch (JDOMException | IOException e) {              e.printStackTrace();          }        }        public static void main(String[] args) {          new JdomXML().parseXML("你自己的xml路径");      }  }   说明:两种方式都是可以的,原理基本相同。语法略有不同,但是还是都很好理解。可以使用这种方法完成一个自己的Spring的IOC的功能玩玩。

0 0
原创粉丝点击