天天看点

java使用dom读取,更新xml文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

<code>package</code> <code>com.sun.xml;</code>

<code>import</code> <code>java.io.File;</code>

<code>import</code> <code>java.io.FileNotFoundException;</code>

<code>import</code> <code>java.io.FileOutputStream;</code>

<code>import</code> <code>java.io.IOException;</code>

<code>import</code> <code>java.io.OutputStreamWriter;</code>

<code>import</code> <code>java.io.UnsupportedEncodingException;</code>

<code>import</code> <code>javax.xml.parsers.DocumentBuilder;</code>

<code>import</code> <code>javax.xml.parsers.DocumentBuilderFactory;</code>

<code>import</code> <code>javax.xml.parsers.ParserConfigurationException;</code>

<code>import</code> <code>javax.xml.transform.OutputKeys;</code>

<code>import</code> <code>javax.xml.transform.Transformer;</code>

<code>import</code> <code>javax.xml.transform.TransformerException;</code>

<code>import</code> <code>javax.xml.transform.TransformerFactory;</code>

<code>import</code> <code>javax.xml.transform.dom.DOMSource;</code>

<code>import</code> <code>javax.xml.transform.stream.StreamResult;</code>

<code>import</code> <code>org.w3c.dom.Document;</code>

<code>import</code> <code>org.w3c.dom.Element;</code>

<code>import</code> <code>org.w3c.dom.Node;</code>

<code>import</code> <code>org.w3c.dom.NodeList;</code>

<code>import</code> <code>org.w3c.dom.Text;</code>

<code>import</code> <code>org.xml.sax.SAXException;</code>

<code>public</code> <code>class</code> <code>ReadXml {</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) </code><code>throws</code> <code>ParserConfigurationException, TransformerException {</code>

<code>        </code><code>Document document=read(</code><code>"C:\\Users\\Administrator\\Desktop\\bookstore1.xml"</code><code>);</code>

<code>        </code><code>String path=</code><code>"C:\\Users\\Administrator\\Desktop\\bookstore1.xml"</code><code>;</code>

<code>        </code><code>addNode(document, path, </code><code>"张三"</code><code>);</code>

<code>    </code><code>}</code>

<code>    </code><code>public</code> <code>static</code> <code>Document  read(String path) </code><code>throws</code> <code>ParserConfigurationException, TransformerException{</code>

<code>        </code><code>Document document=</code><code>null</code><code>;</code>

<code>        </code><code>DocumentBuilderFactory bf=DocumentBuilderFactory.newInstance();</code>

<code>        </code><code>DocumentBuilder builder=bf.newDocumentBuilder();</code>

<code>        </code><code>File file=</code><code>new</code> <code>File(path);</code>

<code>        </code><code>try</code> <code>{</code>

<code>            </code><code>document= builder.parse(file);</code>

<code>            </code><code>//得到值为title的标签,返回的是集合</code>

<code>            </code><code>NodeList nodeList=document.getElementsByTagName(</code><code>"title"</code><code>);      </code>

<code>            </code><code>for</code><code>(</code><code>int</code> <code>i=</code><code>0</code><code>;i&lt;nodeList.getLength();i++){</code>

<code>                </code><code>Node node=nodeList.item(i);</code>

<code>                </code><code>String string=node.getTextContent();</code>

<code>                </code><code>System.out.println(string);</code>

<code>                </code><code>updateXmlNode(document, node, </code><code>"sssss"</code><code>, path);</code>

<code>            </code><code>}</code>

<code>            </code> 

<code>        </code><code>} </code><code>catch</code> <code>(SAXException | IOException e) {</code>

<code>            </code><code>// TODO Auto-generated catch block</code>

<code>            </code><code>e.printStackTrace();</code>

<code>        </code><code>}</code>

<code>        </code><code>return</code> <code>document;</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>updateXmlNode(Document document,Node node,String text,String path) </code><code>throws</code> <code>TransformerException, UnsupportedEncodingException, FileNotFoundException{</code>

<code>        </code><code>node.setTextContent(text);</code>

<code>        </code><code>writeToFile(document, path);</code>

<code>    </code> 

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>addNode(Document document,String path,String text){</code>

<code>        </code><code>Text text2=document.createTextNode(text);</code>

<code>        </code><code>Text text3=document.createTextNode(text);</code>

<code>        </code><code>Text text4=document.createTextNode(text);</code>

<code>        </code> 

<code>        </code><code>Element element=document.createElement(</code><code>"book"</code><code>);</code>

<code>        </code><code>Element element2=document.createElement(</code><code>"title"</code><code>);</code>

<code>        </code><code>Element element3=document.createElement(</code><code>"author"</code><code>);</code>

<code>        </code><code>Element element4=document.createElement(</code><code>"price"</code><code>);</code>

<code>        </code><code>element2.appendChild(text2);</code>

<code>        </code><code>element3.appendChild(text3);</code>

<code>        </code><code>element4.appendChild(text4);</code>

<code>        </code><code>element.appendChild(element2);</code>

<code>        </code><code>element.appendChild(element3);</code>

<code>        </code><code>element.appendChild(element4);</code>

<code>        </code><code>NodeList nodeList= document.getElementsByTagName(</code><code>"bookstore"</code><code>); </code>

<code>        </code><code>Node node=nodeList.item(</code><code>0</code><code>);</code>

<code>        </code><code>node.appendChild(element);</code>

<code>            </code><code>writeToFile(document, path);</code>

<code>        </code><code>} </code><code>catch</code> <code>(UnsupportedEncodingException | FileNotFoundException</code>

<code>                </code><code>| TransformerException e) {</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>writeToFile(Document document,String path) </code><code>throws</code> <code>TransformerException, UnsupportedEncodingException, FileNotFoundException{</code>

<code>        </code><code>TransformerFactory transformerFactory=TransformerFactory.newInstance();</code>

<code>        </code><code>Transformer transformer=transformerFactory.newTransformer();</code>

<code>        </code><code>/*</code>

<code>         </code><code>* 格式化输出xml文档,换行和缩进*/</code>

<code>          </code><code>transformer.setOutputProperty(OutputKeys.INDENT, "yes");  </code>

<code>        </code><code>transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");</code>

<code>        </code><code>//transformer.transform(new DOMSource(document), new StreamResult(path));</code>

<code>         </code><code>* 设置输出流的编码为UTF-8*/</code>

<code>        </code><code>OutputStreamWriter oWriter=</code><code>new</code> <code>OutputStreamWriter(</code><code>new</code> <code>FileOutputStream(</code><code>new</code> <code>File(path)),</code><code>"UTF-8"</code><code>);</code>

<code>        </code><code>document.setXmlStandalone(</code><code>true</code><code>);</code>

<code>        </code><code>transformer.transform(</code><code>new</code> <code>DOMSource(document),</code><code>new</code> <code>StreamResult(oWriter));</code>

<code>}</code>

xml文件如下:

<code>&lt;?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"utf-8"</code><code>?&gt;</code>

<code> </code><code>&lt;bookstore&gt;</code>

<code>   </code><code>&lt;!--记录书本的信息--&gt;</code>

<code>   </code><code>&lt;book&gt;</code>

<code>    </code><code>&lt;title&gt;数据结构&lt;/title&gt;</code>

<code>    </code><code>&lt;author&gt;严蔚敏&lt;/author&gt;</code>

<code>    </code><code>&lt;price&gt;</code><code>30.00</code><code>&lt;/price&gt;</code>

<code>  </code><code>&lt;/book&gt;</code>

<code>&lt;/bookstore&gt;</code>

 本文转自 matengbing 51CTO博客,原文链接:http://blog.51cto.com/matengbing/1876353