`

​读​写​x​m​l​的​方​法..

 
阅读更多
http://wenku.baidu.com/view/77a2181e10a6f524ccbf854b.html      dom4j_API
 
http://wenku.baidu.com/view/7b1b3f79168884868762d607.html
http://www.cnblogs.com/shitianzeng/articles/2518323.html
一.Document对象相关
 
1.读取XML文件,获得document对象.
            SAXReader reader = new SAXReader();
            Document  document = reader.read(new File("input.xml"));
 
2.解析XML形式的文本,得到document对象.
            String text = "<members></members>";
            Document document = DocumentHelper.parseText(text);
3.主动创建document对象.
            Document document = DocumentHelper.createDocument();
            Element root = document.addElement("members");// 创建根节点
二.节点相关
 
1.获取文档的根节点.
Element rootElm = document.getRootElement();
2.取得某节点的单个子节点.
Element memberElm=root.element("member");// "member"是节点名
3.取得节点的文字
String text=memberElm.getText();
也可以用:
String text=root.elementText("name");这个是取得根节点下的name字节点的文字.
 
4.取得某节点下名为"member"的所有字节点并进行遍历.
List nodes = rootElm.elements("member");
 
for (Iterator it = nodes.iterator(); it.hasNext();) {
   Element elm = (Element) it.next();
   // do something
}
5.对某节点下的所有子节点进行遍历.
            for(Iterator it=root.elementIterator();it.hasNext();){
                Element element = (Element) it.next();
                // do something
            }
6.在某节点下添加子节点.
Element ageElm = newMemberElm.addElement("age");
7.设置节点文字.
ageElm.setText("29");
8.删除某节点.
parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点
三.属性相关.
1.取得某节点下的某属性
            Element root=document.getRootElement();    
            Attribute attribute=root.attribute("size");// 属性名name
2.取得属性的文字
            String text=attribute.getText();
也可以用:
String text2=root.element("name").attributeValue("firstname");这个是取得根节点下name字节点的属性firstname的值.
 
3.遍历某节点的所有属性
            Element root=document.getRootElement();    
            for(Iterator it=root.attributeIterator();it.hasNext();){
                Attribute attribute = (Attribute) it.next();
                String text=attribute.getText();
                System.out.println(text);
            }
4.设置某节点的属性和文字.
newMemberElm.addAttribute("name", "sitinspring");
5.设置属性的文字
            Attribute attribute=root.attribute("name");
            attribute.setText("sitinspring");
6.删除某属性
            Attribute attribute=root.attribute("size");// 属性名name
            root.remove(attribute);
四.将文档写入XML文件.
1.文档中全为英文,不设置编码,直接写入的形式.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
2.文档中含有中文,设置编码格式写入的形式.
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("GBK");    // 指定XML编码        
            XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
            
            writer.write(document);
            writer.close();
五.字符串与XML的转换
1.将字符串转化为XML
String text = "<members> <member>sitinspring</member> </members>";
Document document = DocumentHelper.parseText(text);
2.将文档或节点的XML转化为字符串.
            SAXReader reader = new SAXReader();
            Document  document = reader.read(new File("input.xml"));            
            Element root=document.getRootElement();                
            String docXmlText=document.asXML();
            String rootXmlText=root.asXML();
            Element memberElm=root.element("member");
            String memberXmlText=memberElm.asXML();
六.使用XPath快速找到节点.
读取的XML文档示例
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
  <name>MemberManagement</name>
  <comment></comment>
  <projects>
    <project>PRJ1</project>
    <project>PRJ2</project>
    <project>PRJ3</project>
    <project>PRJ4</project>
  </projects>
  <buildSpec>
    <buildCommand>
      <name>org.eclipse.jdt.core.javabuilder</name>
      <arguments>
      </arguments>
    </buildCommand>
  </buildSpec>
  <natures>
    <nature>org.eclipse.jdt.core.javanature</nature>
  </natures>
</projectDescription>
 
使用XPath快速找到节点project.
 public static void main(String[] args){
    SAXReader reader = new SAXReader();
    
    try{
      Document  doc = reader.read(new File("sample.xml"));
      
      List projects=doc.selectNodes("/projectDescription/projects/project");
      
      Iterator it=projects.iterator();
      
      while(it.hasNext()){
        Element elm=(Element)it.next();       
        System.out.println(elm.getText());
      }
      
    }
    catch(Exception ex){
       ex.printStackTrace();
    }
 
 
例子:
package com.stz;
 
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
 
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
 
import java.io.File;
 
import java.util.Iterator;
import java.util.List;
 
public class TestDate {
 
  public static void  main(String[]args){
    String xml="<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
     "<students>"+
     "   <student id=\"1\">"+
      "      <name>stz</name>"+
       "     <age>23</age>"+
        "</student>"+
        "<student id=\"2\">"+
            "<name>rhl</name>"+
            "<age>23</age>"+
        "</student>"+
        "<student id=\"3\">"+
         "   <name>tom</name>"+
          "  <age>23</age>"+
        "</student>"+
    "</students>";   
    
    try {
        Document document=DocumentHelper.parseText(xml);
        Element root=document.getRootElement();
        //System.out.println(ele.e);
        //List nodes=root.elements("student");
        //System.out.println(root.getName());
        //root.elementIterator();
        List nodes=document.selectNodes("/students/student");
 
        for (Iterator it = nodes.iterator(); it.hasNext();) {
            Element elm = (Element) it.next();
            System.out.println("id:"+elm.attributeValue("id"));
            System.out.println(elm.getName());
            Element eles=elm.element("name");
            System.out.println(eles.getText());
            Element elea=elm.element("age");
            System.out.println(elea.getText());
         }
    } catch (DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
 
  }
}
分享到:
评论

相关推荐

    l​i​n​u​x​在​S​e​c​u​r​e​C​R​T​下​如​何​配​置​j​d​k

    log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d- %c -%-4r [%t] %-5p %c %x - %m%n ``` 在 SecureCRT 环境中配置 JDK 需要满足一定的条件,并且需要注意一些细节问题。同时,写一个 Java 程序来...

    基​於​L​i​n​u​x​的​應​用​程​序​交​叉​編​譯

    【标题】: 基于Linux的应用程序交叉编译 【正文】: 交叉编译是开发嵌入式系统中的一个重要环节,它允许开发者在一种架构的计算机上(如个人电脑)构建适用于另一种架构(如ARM处理器)的软件。...

    思​科​ ​P​P​P​ ​配​置

    【思科PPP配置】是网络通信中的重要环节,主要用于路由器之间的点对点连接。PPP(Point-to-Point Protocol)协议是一种在两个直接相连的设备之间建立网络连接的标准协议,广泛应用于广域网(WAN)中,如Dial-up、...

    Datasheet_MLX90614 中文版 数据手册

    本​手​册​是​根​据​M​e​l​e​x​i​s​ ​的​M​L​X​9​0​6​1​4​ ​数​据​手​册​R​e​v​0​0​8​翻​译​而​来​,​仅​供​用​户​参​考​所​用​,​传​感​器​所​有​数​据​及​...

    Halcon算子大全

    本人亲自呕心吐血整理出史​上​最​全​的​H​a​l​c​o​n​算​子​中​英...​S​e​g​m​e​n​t​a​t​i​o​n​,​S​y​s​t​e​m​,​T​o​o​l​s​,​T​u​p​l​e​,​X​L​D​。 绝对物超所值啊。

    智物通讯ZM358 4G核心板简介

    ​是​面​向​全​球​市​场​T​D​D​-​L​T​E​/​F​D​D​-​L​T​E​/​W​C​D​M​A​/​T​D​-​S​C​D​M​A​/​E​V​D​O​/​C​D​M​A​1​X​/​G​S​M​ ​七​种​网​络​制​式​的​...

    insight-6.8-1.tar.bz2

    该版本软件能成功安装,安装详细请看我的博客文章"安​装​a​r​m​-​l​i​n​u​x​-​i​n​s​i​g​h​t".

    vue-storybook-sa​​mple:Vue.js + Storybook示例

    Node.js-12.x 纱线-1.17.x 使用ライブラリ vue-2.6.x @ storybook / vue-6.0.x @ storybook / addon-actions-6.0.x @ storybook / addon-controls-6.0.x @ storybook / addon-docs-6.0.x @ storybook / addon-...

    dotproject数据库ER图

    本​文​档​是​从​官​方​版​本​的​数​据​库​x​m​l​整​理​并​用​工​具​转​换​出​来​的​,​和​最​新​版​本​有​差​异​,​但​还​是​值​得​参​考​的

    假设要计算序列x(n)=u(n)-u(n-L),0≤n≤L 和h(n)=cos⁡(0.2πn),0≤n≤M的线性卷积

    假设要计算序列x(n)=u(n)-u(n-L),0≤n≤L 和h(n)=cos⁡(0.2πn),0≤n≤M的线性卷积,完成以下实验内容: (1)设 L=M,根据线性卷积的表达式和快速卷积的原理,分别编程实现计 算两个序列线性卷积的方法; (2)...

    AssociatedLaguerreP​oly.m:该程序返回关联拉盖尔多项式 L_{n,m} 的系数,给定 n 和 m。-matlab开发

    该程序返回关联拉盖尔多项式 L_{n,m} 的系数,给定非负整数 n 和 m,其中 m &lt;= n。 当 m=0 时,这是拉盖尔多项式 L_n。 polyval(AssociatedLaguerrePoly(n,m),x) 评估 L_{n,m}(x)。

    稀疏编码的经典解法——ISTA算法的推导

    \qquad现有一个求稀疏编码的问题: min⁡∥z∥0s.t. x=Dz \min \parallel z \...\qquad 解决上式是一个复杂度随 m 以指数级增长的组合问题,最常见的解决方法是将 l0l_0l0​ 范数替换为 l1l_1l1​范数.即目标函数

    cte_propag_impedanc​ia(R,L,G,C,omega):阻抗计算-matlab开发

    标题中的`cte_propag_impedancia(R,L,G,C,omega)`函数显然就是这样一个工具,它用于计算电路的复数阻抗,其中参数`R`代表电阻,`L`代表电感,`G`代表导纳(电导的倒数,与电阻相反),`C`代表电容,而`omega`则表示...

    code_kata_ruby:我的 ruby​​ 代码卡塔

    罗马数字是一种古老的计数系统,其符号包括 I, V, X, L, C, D, M。编写一个 Ruby 函数来实现罗马数字和整数之间的转换是一项常见的 Kata。这个 kata 要求你理解罗马数字的规则,如 I 在 V 前面表示 4,X 在 L 前面...

    run_it_remote:远程运行代码

    因为get_dpkg的名称是从dpkg -l收​​集信息。 更多例子 试试这个: python -m remote -x -n sudo -m host1,host2 'hwinfo.all_info()' 它将打印有关远程计算机的所有信息。 -x用于评估模式。 结果将返回并以json...

    two2DLineIntersecti​on:提取两条2d线之间的交点,每条线由两个点定义。-matlab开发

    对于两条直线 \( L_1 \) 和 \( L_2 \),它们分别由点 \( P_1(x_1, y_1) \) 和 \( Q_1(x_2, y_2) \) 以及点 \( P_2(x_3, y_3) \) 和 \( Q_2(x_4, y_4) \) 定义,我们可以根据这些点构建出两条直线的方程。 为了找到...

    Bisection_method_co​de:它的二等分算法代码-matlab开发

    **二分法(Bisection Method)是一种数值分析中的搜索算法,用于求解方程的根...此外,虽然二分法简单且稳定,但它不是最快速的根查找算法,比如牛顿法和二分法的变种(如false position method)可能更快地收敛到根。

Global site tag (gtag.js) - Google Analytics