昆明java培训
达内昆明广州春城路

18487146383

热门课程

XML编程:使用DOM接口操作xml

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

使用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 IO流之字节流和字符流

java IO流之file类的常用操作

搭建james邮件服务器

Java识别操作系统

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货