课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > java教程 > XML编程:使用DOM接口操作xml
  • XML编程:使用DOM接口操作xml

    发布:昆明Java培训      来源:java教程      时间:2016-10-25

  • 使用DOM接口操作xml

    昆明达内Java培训的老师知道,DOM解析器将整个XML文档加载到内存中,使用DOM模型对XML文档在内存中建模。DOM解析器被称为DocumentBuilder,它位于javax.xml.parsers包下。下面昆明达内Java培训的老师是使用DOM对xml文档进行CRUD操作的演示。

    测试类代码:Source和Result接口的使用,将内存中xml模型输出

    1 public class DomTest {

    2    private Document document;

    3    

    4    @Before

    5    public void setUp() throws Exception{

    6        //创建工厂对象

    7        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    8        //创建构建器对象

    9        DocumentBuilder builder = factory.newDocumentBuilder();

    10        //获取books.xml文档的输入流对象

    11        InputStream is = DomTest.class.getClassLoader().getResourceAsStream("books.xml");

    12        //解析xml,在内存中构建DOM文档模型

    13        document = builder.parse(is);

    14    }

    15

    16    

    17    /**

    18     *查找book的属性为web的title和price节点的文本值

    19     */

    20    @Test

    21    public void testRetrieve() throws Exception{

    22        //获取book节点列表

    23        NodeList nodeList = document.getElementsByTagName("book");

    24        //遍历列表,找到属性为web的book节点

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

    26            //将其转换为元素,带有属性,Node类型没有属性

    27            Element element = (Element) nodeList.item(i);

    28            String value = element.getAttribute("category");

    29            //判断属性值为WEB

    30            if("WEB".equals(value)){

    31                //获取title子节点和price子节点

    32                Node titleNode=element.getElementsByTagName("title").item(0);

    33                Node priceNode = element.getElementsByTagName("price").item(0);

    34                String titleText=titleNode.getTextContent();

    35                String priceText = priceNode.getTextContent();

    36                System.out.println("<title>"+titleText+"</title>"+

    37                            "<price>"+priceText+"</price>");

    38            }

    39        }

    40    }

    41    

    42    /**

    43     *在第一个book元素前增加一个book元素

    44     * <book category="WEB">

    45          <title lang="en">Learning XML</title>

    46          <author>Erik T. Ray</author>

    47          <year>2003</year>

    48          <price>39.95</price>

    49        </book>

    50     * @throws Exception

    51     */

    52    @Test

    53    public void testCreate() throws Exception{

    54        //创建book节点,并创建属性

    55        Element bookElement = document.createElement("book");

    56        Attr attr = document.createAttribute("category");

    57        attr.setTextContent("JAVA");

    58        bookElement.setAttributeNode(attr);

    59        //创建title子节点

    60        Element titleElement=document.createElement("title");

    61        titleElement.setTextContent("Learning JDK8");

    62        //创建author节点

    63        Element authorElement = document.createElement("author");

    64        authorElement.setTextContent("zhang san");

    65        //创建year节点

    66        Element yearElement = document.createElement("year");

    67        yearElement.setTextContent("2013");

    68        //创建price节点

    69        Element priceElement = document.createElement("price");

    70        priceElement.setTextContent("119");

    71        //将这些节点添加到子节点book

    72        bookElement.appendChild(titleElement);

    73        bookElement.appendChild(authorElement);

    74        bookElement.appendChild(yearElement);

    75        bookElement.appendChild(priceElement);

    76        //获得根节点的位置

    77        Node node = document.getElementsByTagName("bookstore").item(0);

    78        //获得要插入引用的节点位置

    79        Node refChild = document.getElementsByTagName("book").item(3);

    80        //refChild=null,表示在最后位置插入

    81        node.insertBefore(bookElement, refChild);

    82        

    83        //打印到控制台

    84        this.transformTo(document);

    85    }

    86    

    87    /**

    88     *更新下面book节点的price值

    89     * <book category="CHILDREN">

    90          <title lang="en">Harry Potter</title>

    91          <author>J K. Rowling</author>

    92          <year>2005</year>

    93          <price>29.99</price>

    94        </book>

    95     * @throws Exception

    96     */

    97    @Test

    98    public void testUpdate() throws Exception{

    99        //获得该book节点

    100        Element element=(Element) document.getElementsByTagName("book").item(1);

    101        //获得该price节点

    102        Node priceNode = element.getElementsByTagName("price").item(0);

    103        priceNode.setTextContent("49.99");

    104        //获得year节点

    105        Node yearNode=element.getElementsByTagName("year").item(0);

    106        yearNode.setTextContent("2010");

    107        

    108        //打印到控制台

    109        this.transformTo(document);

    110    }

    111    

    112    /**

    113     *删除category值为WEB的book节点

    114     * @throws Exception

    115     */

    116    @Test

    117    public void testDelete() throws Exception{

    118        //获得父节点

    119        Element parent = (Element) document.getElementsByTagName("bookstore").item(0);

    120        

    121        //获得满足条件的子节点

    122        NodeList nodeList = document.getElementsByTagName("book");

    123        //存储要删除的节点,如果删除一个节点,内存中的DOM会立即变化

    124        List<Node> list=new ArrayList<Node>();

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

    126            Element item = (Element) odeList.item(i);

    127            String attr = item.getAttribute("category");

    128            if("WEB".equals(attr)){

    129                //保存该节点

    130                list.add(item);

    131            }

    132        }

    133        //遍历列表

    134        if(list.size()>0){

    135            for(int i=0;i<list.size();i++){

    136                //删除列表中的节点

    137                parent.removeChild(list.get(i));

    138            }

    139        }

    140        

    141        //打印到控制台

    142        this.transformTo(document);

    143    }

    144    

    145    /**

    146     *將DOM模型输出到控制台

    147     * @param node

    148     * @throws Exception

    149     */

    150    private void transformTo(Node node) throws Exception{

    151        //构造转换器

    152        TransformerFactory tf = TransformerFactory.newInstance();

    153        Transformer transformer = tf.newTransformer();

    154        //指定源

    155        Source xmlSource = new DOMSource(node);

    156        //指定目标

    157        // OutputStream os=new FileOutputStream("books_new.xml");

    158        Result outputTarget = new StreamResult(System.out);

    159        transformer.transform(xmlSource, outputTarget);

    160    }

    161 }

    了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:XML编程的JAXP简介

下一篇:XML编程:使用SAX接口操作xml

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:12/29

Java--零基础业余班

Java--零基础业余班

开班日期:12/29

Java--周末提升班

Java--周末提升班

开班日期:12/29

Java--零基础周末班

Java--零基础周末班

开班日期:12/29

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56