xml的crud

来源:互联网 发布:javascript数组去重复 编辑:程序博客网 时间:2024/05/19 11:47

创建xml文件:

//获取DocumentBuilderFactory工厂

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

    // 设置去掉空格的方法

    factory.setIgnoringElementContentWhitespace(true);

    // 获取解析器

    DocumentBuilder builder=factory.newDocumentBuilder();

//创建document接口

Document doc = builder.newDocument();

    //设置版本

    doc.setXmlVersion("1.0");

    //创建注释

    Comment comment = doc.createComment("创建xml文件");

    //把注释添加到document接口

    doc.appendChild(comment);

    //建立XML 元素的根结点,参数为学生

    Element root = doc.createElement("学生");

    //建立XML 元素的子结点,参数为姓名

    Element name = doc.createElement("姓名");

    //建立文字结点,并把它追加到子结点name

    name.appendChild(doc.createTextNode("redarmy_chen"));

    //建立XML 元素的子结点,参数为性别

    Element sex = doc.createElement("性别");

    //设置sex子结点的文字结点

    sex.setAttribute("name", "");

    //把子结点追加到根点上

    root.appendChild(name);

    root.appendChild(sex);

    //把根结点追加到xml

    doc.appendChild(root);

    //建立TransformerFactory对象

    TransformerFactory factory1 = TransformerFactory.newInstance();

    //XSLT Script文件作为输入建立Transformer对象

    Transformer tformer = factory1.newTransformer();

    //转换xml文档

    tformer.transform(new DOMSource(doc), new StreamResult("src//ds.xml"));

    }

生成的xml文档:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--创建xml文件-->
<学生>
 <姓名>redarmy_chen</姓名>
 <性别 name="男"/>
</学生>

src下建dom.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE 中国[

    <!ELEMENT 中国 (北京,河南*,河北)>

    <!ELEMENT 北京 (海淀)>

<!ELEMENT 海淀 (上地,中关村,东北旺)>

<!ELEMENT 上地 (#PCDATA)>

    <!ELEMENT 中关村 (#PCDATA)>

<!ELEMENT 东北旺 (#PCDATA)>

    <!ELEMENT 河南 (郑州,安阳)>

<!ELEMENT 郑州 (商丘)>

<!ELEMENT 商丘 (#PCDATA)>

<!ELEMENT 安阳 EMPTY>

    <!ELEMENT 河北 (石家庄)>

    <!ELEMENT 石家庄 EMPTY>

  

    <!ATTLIST 商丘 人口 CDATA #IMPLIED>

    <!ATTLIST 安阳 人口 CDATA #IMPLIED>

    <!ATTLIST 石家庄 人口 CDATA #IMPLIED>

]>

<中国>

     <北京>

         <海淀>

              <上地>上地七街</上地>

              <中关村>鼎好</中关村>

              <东北旺>软件园</东北旺>

         </海淀>

     </北京>

     <河南>

         <郑州>

              <商丘人口="100万">商丘中学</商丘>

         </郑州>

         <安阳 />

     </河南>

     <河北>

         <石家庄人口="2000万"/>

     </河北>

</中国>

// 遍历所有的xml文档中的内容

     @Test

     public void test1() throws Exception {

         //获取DocumentBuilderFactory工厂

         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

         // 设置去掉空格的方法

         factory.setIgnoringElementContentWhitespace(true);

         // 获取解析器

         DocumentBuilder builder = factory.newDocumentBuilder();

         // 解析xml文档

         Document document = builder.parse(new File("src//dom.xml"));

         //获取根结点对象

         Element root = document.getDocumentElement();

         //获取根结点元素名称

         String tagname = root.getTagName();

         System.out.println("根结点的名称是:"+root.getTagName());

         //调用Node中的getChildNodes()获取根结点的子结点

         NodeList Nlist = root.getChildNodes();

         //遍历该子结点

         display(Nlist);

     }

     //使用递归遍历个子结点中的子结点

     public void display(NodeList Nlist){

         for (int i = 0; i <Nlist.getLength(); i++) {

              Node node = Nlist.item(i);

              System.out.println(node.getNodeName());

              if(node.hasChildNodes()){//判断该结点是否还有子结点

                   NodeList list = node.getChildNodes();

                   display(list);     //调用方法本身

              }else{

                   if(node.getNodeType()==Node.TEXT_NODE){

System.out.println("---------"+node.getTextContent());

                  }

                 break;

              }

}

}运行结果如下:

 

/**解析商丘的人口这个这个属性*/

    public void test1()throws Exception{

//获取DocumentBuilderFactory工厂

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        // 获取解析器

        DocumentBuilder builder  = factory.newDocumentBuilder();

        // 解析xml文档

        Document document = builder.parse(new File("src//dom.xml"));

        // 获得商丘的属性里表

        NodeList list = document.getElementsByTagName("商丘");

        Node node = list.item(0);

        if(node.getNodeType()== Node.ELEMENT_NODE){

            Element element = (Element)node;

            String value = element.getAttribute("人口");

           System.out.println("属性的值是:"+value);

        }

    }下面的代码实现的与上边的效果一样

    public void test2()throws Exception{

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder  = factory.newDocumentBuilder();

        Document document = builder.parse(new File("src//dom.xml"));

        Element element =  document.getElementById("attr");

        String value = element.getAttribute("id");

        String value1 = element.getAttribute("人口");

           System.out.println("属性的值是:"+value+"   "+value1);

    }

运行结果如下:属性的值是:100

增加一个子结点

public void test()throws Exception{

     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

     factory.setIgnoringElementContentWhitespace(true);

     DocumentBuilder builder  = factory.newDocumentBuilder();

     Document doc = builder.parse(new File("src//dom.xml"));

    //增加一个子结点,并添加结点内容“地方”

     Element element = doc.createElement("东北旺");

     element.appendChild(doc.createTextNode("地方"));

     Node node = doc.getElementsByTagName("海淀").item(0);

     node.appendChild(element);

     TransformerFactory factory1 = TransformerFactory.newInstance();

     Transformer tformer = factory1.newTransformer();

     tformer.transform(new DOMSource(doc), new StreamResult("src//dom.xml"));

    }运行结果如下:

    <北京>

        <海淀>

            <上地>上地七街</上地>

            <中关村>鼎好</中关村>

            <东北旺>软件园</东北旺>

            <东北旺></东北旺>

</海淀>

    </北京>

    <河南>

        <郑州>

            <商丘 人口="100">商丘中学</商丘>

        </郑州>

        <安阳/>

    </河南>

    <河北>

        <石家庄 人口="2000"/>

    </河北>

</中国>

删除第二个东北旺的子结点

    public void test1()throws Exception{

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

factory.setIgnoringElementContentWhitespace(true);

        DocumentBuilder builder  = factory.newDocumentBuilder();

        Document doc = builder.parse(new File("src//dom.xml"));

        Node node = doc.getElementsByTagName("海淀").item(0);

        //删除第二个东北旺的子结点

        node.removeChild(doc.getElementsByTagName("东北旺").item(1));

        TransformerFactory factory1 = TransformerFactory.newInstance();

        Transformer tformer = factory1.newTransformer();

    tformer.transform(new DOMSource(doc), new StreamResult("src//dom.xml"));

    }运行结果如下:

    <北京>

        <海淀>

            <上地>上地七街</上地>

            <中关村>鼎好</中关村>

            <东北旺>软件园</东北旺>

        </海淀>

    </北京>

    <河南>

        <郑州>

            <商丘 人口="100">商丘中学</商丘>

        </郑州>

        <安阳/>

    </河南>

    <河北>

        <石家庄 人口="2000"/>

    </河北>

</中国>

改变东北旺的内容结点

    public void test2()throws Exception{

         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        factory.setIgnoringElementContentWhitespace(true);

        DocumentBuilder builder  = factory.newDocumentBuilder();

        Document doc = builder.parse(new File("src//dom.xml"));

    //改变东北旺的内容结点

        Node node1 = doc.getElementsByTagName("东北旺").item(0);

        node1.setTextContent("杀人");

        TransformerFactory factory1 = TransformerFactory.newInstance();

        Transformer tformer = factory1.newTransformer();

    tformer.transform(new DOMSource(doc), new StreamResult("src//dom.xml"));

    }运行结果如下:

    <北京>

        <海淀>

            <上地>上地七街</上地>

            <中关村>鼎好</中关村>

            <东北旺>杀人</东北旺>

        <东北旺></东北旺></海淀>

    </北京>

    <河南>

        <郑州>

            <商丘 人口="100">商丘中学</商丘>

        </郑州>

        <安阳/>

    </河南>

    <河北>

        <石家庄 人口="2000"/>

    </河北>

</中国>

新增子元素在子元素的开始或最后

public void test4()throws Exception{

     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

factory.setIgnoringElementContentWhitespace(true);

    DocumentBuilder builder  = factory.newDocumentBuilder();

    Document doc = builder.parse(new File("src//dom.xml"));

    //新增子元素东北旺

    Element newnode=(Element)doc.createElement("东北旺");

    newnode.appendChild(doc.createTextNode(""));

    Node node = doc.getElementsByTagName("海淀").item(0);

    node.appendChild(newnode);

    node.insertBefore(newnode, node.getFirstChild());

//node.insertBefore(newnode, node.getFirstChild());

    TransformerFactory factory1 = TransformerFactory.newInstance();

    Transformer tformer = factory1.newTransformer();

    tformer.transform(new DOMSource(doc), new StreamResult("src//dom.xml"));

    }运行结果如下:

<北京>

       <海淀>

            <东北旺></东北旺>

            <上地>上地七街</上地>

            <中关村>鼎好</中关村>

            <东北旺>软件园</东北旺>

            <东北旺></东北旺>

        </海淀>

    </北京>

 

北京
海淀
上地
#text
---------上地七街
中关村
#text
---------鼎好
东北旺
#text
---------软件园
河南
郑州
商丘
#text
---------商丘中学
安阳
河北
石家庄