(18)XML应用3

来源:互联网 发布:知豆电动汽车租赁app 编辑:程序博客网 时间:2024/05/01 00:21
 

11,09,29

课堂主要内容:

1、如果需要DOM解析器,就用DocumentBuilder生成一个解析器。

如果需要SAX解析器,就用SAXParser生成一个解析器。

2、在Javax.xml.parsers包下,

3、Document doc .文档对象

    Node node .节点对象

4、getElementsByTagName()

    getTextContent() //返回的是元素的文本值

<书名>jsp程序设计</书名>

它是一个Node节点——是一个元素节点Element节点

方法一:

Node node .    

node.getNodeType();  //返回的是1      

node.getNodeName()  //返回的是书名       

node.getNodeValue()   //返回的是null ,因为是Element节点,所以nodeValue值为null    

node.getTextContent()  //返回值是jsp程序设计

方法二:

Text text=(Text)node.getChildNodes().item(0);

text.getNodeValue();   //返回的是jsp程序设计,因为这个节点是文本节点,所以当我们在获取nodeValue值是jsp程序设计

5、得到属性值的方法:

(1)getNodeValue()

(2)getValue()

(3)getTextContent()    

以上三种方法返回的值是相同的。

 

if(node.getNodeType()==Node.ELEMENT_NODE)  //判断是不是元素

       Element slement=(Element) node; //强制造型

       Sysout.out.println(element.getAttribute(" "));   //String

       Attr att=element.getAttributenode("name");   //Attr节点

              if(node instanceof Element){

       Element slement=(Element) node; //强制造型

              Sysout.out.println(element.getAttribute(" "));   //String

       Attr att=element.getAttributenode("name");   //Attr节点

              sysout.out.println(att.getNodeValue()+"  "+att.getValue()+"   "+att.getTestContent());

createElement() ;//创建一个元素

/*节点的添加*/

public static void createElement(Document doc){

        //确定添加节点的位置,找到父节点的位置,在父节点里添加子节点。item(0),在第几个节点添加属性

        Node book=doc.getElementsByTagName("书").item(0);

        //生成一个新节点

        Element element=doc.dreateElement("出版社");

        //(1)

        //element.setTextContent("清华大学");

        //(2)创建一个文本节点

        Text text=doc.sreateTextNode("清华大学");

        element.appendChild(text);

        //在指定位置把新生成的节点添加进去

        book.appendChild(element);  

        //将内存中树状的结构把doc写入到xml文件中

        //(1)生成工厂对象

        TransformerFactory factory=TransformerFactory.newInstance();

        //(2)由工厂对象生成转换对象Transformer

        Transformer trans=factory.newTransformer();

        //(3)通过trans实现doc转换到xml文档中,//需要一个DOMSource对象代表源树

      //  trans.transform(xmlSource,outputTarget);

          trans.transform(new DOMSource(doc),new StreamResult(new File ("src/BOOK.xml")));

}

}

 

/*确定插入点的位置*/

Node author=doc.getElementsByTagName("作者").item(0);

Node parent=author.getParentNode();  //父亲

Node bother=author.getNextSibling(); //得到的是他的弟弟,后一个

//创建一个新节点,就是出版社节点

Element element=doc.createElement("出版社");

element.setTextContent("清华大学出版社");

//插入节点:在书这个节点中在作者节点之前添加了出版社

parent.insertBefore(element.author);

 

<出版社>dfsfsf</出版社>

 

6、更新XML文档:

javax.xml.transform

 

7、//Node 是一个接口。当形参是接口类型的时候,那么实参是实现了该接口的类的对象。

void func(Node node){

       //

}

//调用方法体

Node node

Document doc

Element element

func(实参);实参:可以是Node类型对象,还可以是Node的子类的对象

 

8、删除操作:

public static void deleteElement(Document doc){

        //获取要删除的那个节点

        Node book=doc.getElementsByTagName("售价").item(1);

       node.getParentNode().removeChild(doc);

        //将内存中树状的结构把doc写入到xml文件中

        //(1)生成工厂对象

        TransformerFactory factory=TransformerFactory.newInstance();

        //(2)由工厂对象生成转换对象Transformer

        Transformer trans=factory.newTransformer();

        //(3)通过trans实现doc转换到xml文档中,//需要一个DOMSource对象代表源树

      //  trans.transform(xmlSource,outputTarget);

          trans.transform(new DOMSource(doc),new StreamResult(new File ("src/BOOK.xml")));

}

}

 

9、更新操作:

public static void updateElement(Document doc){

        //获取要修改的那个节点

        Node book=doc.getElementsByTagName("售价").item(0);

       node.setTextContent("50");//修改内容

//修改属性         

  if(node instanceof Element){

      Element element=(Element) node;   //将node造型成element

       Attr att=element.getAttributeNode("type");

       att.setValue("美元");

       }

        //将内存中树状的结构把doc写入到xml文件中

        //(1)生成工厂对象

        TransformerFactory factory=TransformerFactory.newInstance();

        //(2)由工厂对象生成转换对象Transformer

        Transformer trans=factory.newTransformer();

        //(3)通过trans实现doc转换到xml文档中,//需要一个DOMSource对象代表源树

      //  trans.transform(xmlSource,outputTarget);

          trans.transform(new DOMSource(doc),new StreamResult(new File ("src/BOOK.xml")));

}

}

 

 

二、SAX解析

1、SAX采用的是事件处理的方式解析XML文件,利用SAX解析XML文档,涉及两个部分:解析器和事件处理器。

2、SAX不能不做增删改查操作。只能写。

3、阅读ContentHandler API文档,常用方法:startElement、endElement、characters

 

4、Sax代码:

创建SAXTest.java

       //先获取SAX解析器工厂类的对象

       SAXParserFactory factory=SAXParserFactory.newInstance();

       //获取SAX解析器

       SAXParser sax=factory.newSAXParser();   //有异常。 throws Exception

       //通过sax解析器开始解析文档

       sax.parse(new File("src/BOOK.xml"),new BookHandler());

 

//用来解析BOOK文档

class BookHandler extends DefaultHandler{

 

}

DefaultHandler     默认事件处理器

 

 

原创粉丝点击