好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

String与XML互转以及从XML取节点值并修改的方法

读取xml文件生成document对象

document转换成string类型串

string串转成xml

已知xml节点取 节点值

已知xml节点修改节点值

一个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

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

<transaction>

  <body>

   <request>

    <trantyp>批量业务现存</trantyp>

    <acctnm> 0085213560 </acctnm>

    <acctno> 6225885517843413 </acctno>

    <avlbal> 201958.65 </avlbal>

    <accttyp> 0 </accttyp>

    <trantime> 20170801101030 </trantime>

    <currencytyp>cny</currencytyp>

    <trandesc></trandesc>

    <bal> 201958.65 </bal>

    <tranamt> 100000.00 </tranamt>

   </request>

  </body>

  <header>

   <msg>

    <sndtm> 101019 </sndtm>

    <msgcd>wcs0000200</msgcd>

    <seqnb> 632376531000009 </seqnb>

    <sndmbrcd> 5200 </sndmbrcd>

    <rcvmbrcd> 0000 </rcvmbrcd>

    <snddt> 20170821 </snddt>

    <sndappcd>cbs</sndappcd>

    <rcvappcd>wcs</rcvappcd>

    <calltyp>syn</calltyp>

   </msg>

   <ver> 1.0 </ver>

   <pnt>

    <sndtm> 101216 </sndtm>

    <sndmbrcd> 0000 </sndmbrcd>

    <rcvmbrcd> 0000 </rcvmbrcd>

    <snddt> 20170809 </snddt>

    <sndappcd>esb</sndappcd>

    <rcvappcd>wcs</rcvappcd>

   </pnt>

  </header>

</transaction>

java实现实例:

?

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

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

package com.adtec.mq.client;

 

import java.io.bytearrayinputstream;

import java.io.bytearrayoutputstream;

import java.io.file;

import java.io.inputstream;

 

import javax.xml.parsers.documentbuilder;

import javax.xml.parsers.documentbuilderfactory;

import javax.xml.transform.transformer;

import javax.xml.transform.transformerfactory;

import javax.xml.transform.dom.domsource;

import javax.xml.transform.stream.streamresult;

import javax.xml.xpath.xpath;

import javax.xml.xpath.xpathconstants;

import javax.xml.xpath.xpathexpressionexception;

import javax.xml.xpath.xpathfactory;

 

import org.w3c.dom.document;

import org.w3c.dom.node;

 

public class test {

 

  /**

   *

   * @param document

   *   document对象(读xml生成的)

   * @return string字符串

   * @throws throwable

   */

  public string xmltostring(document document) throws throwable {

   transformerfactory ft = transformerfactory.newinstance();

   transformer ff = ft.newtransformer();

   ff.setoutputproperty( "encoding" , "gb2312" );

   bytearrayoutputstream bos = new bytearrayoutputstream();

   ff.transform( new domsource(document), new streamresult(bos));

   return bos.tostring();

  }

 

  /**

   *

   * @param xml形状的str串

   * @return document 对象

   */

  public document stringtoxml(string str) {

 

   stringbuilder sxml = new stringbuilder();

   sxml.append(str);

   documentbuilderfactory dbf = documentbuilderfactory.newinstance();

   document doc = null ;

   try {

    inputstream is = new bytearrayinputstream(sxml.tostring().getbytes( "utf-8" ));

    doc = dbf.newdocumentbuilder().parse(is);

    is.close();

   } catch (exception e) {

    e.printstacktrace();

   }

   return doc;

  }

 

  /**

   *

   * @param document

   * @return 某个节点的值 前提是需要知道xml格式,知道需要取的节点相对根节点所在位置

   */

  public string getnodevalue(document document, string nodepaht) {

   xpathfactory xpfactory = xpathfactory.newinstance();

   xpath path = xpfactory.newxpath();

   string servinitrbrch = "" ;

   try {

    servinitrbrch = path.evaluate(nodepaht, document);

   } catch (xpathexpressionexception e) {

    e.printstacktrace();

   }

   return servinitrbrch;

  }

 

  /**

   *

   * @param document

   * @param nodepath

   *   需要修改的节点相对根节点所在位置

   * @param vodevalue

   *   替换的值

   */

  public void setnodevalue(document document, string nodepath, string vodevalue) {

   xpathfactory xpfactory = xpathfactory.newinstance();

   xpath path = xpfactory.newxpath();

   node node = null ;

   ;

   try {

    node = (node) path.evaluate(nodepath, document, xpathconstants.node);

   } catch (xpathexpressionexception e) {

    e.printstacktrace();

   }

   node.settextcontent(vodevalue);

  }

 

  public static void main(string[] args) throws throwable {

   // 读取xml文件,生成document对象

   documentbuilder builder = documentbuilderfactory.newinstance().newdocumentbuilder();

   // 文件的位置在工作空间的根目录(位置随意,只要写对就ok)

   document document = builder.parse( new file( "a.xml" ));

 

   test t = new test();

   // xml————》string

   string str = t.xmltostring(document);

   system.out.println( "str:" + str);

   // string ————》xml

   document doc = t.stringtoxml(str);

   string nodepath = "/transaction/header/msg/sndmbrcd" ;

   // getnodevalue

   string nodevalue = t.getnodevalue(doc, nodepath);

   system.out.println( "修改前nodevalue:" + nodevalue);

   // setnodevalue

   t.setnodevalue(doc, nodepath, nodevalue + "hello" );

   system.out.println( "修改后nodevalue:" + t.getnodevalue(doc, nodepath));

  }

 

}

测试结果:

?

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

str:<?xml version= "1.0" encoding= "utf-8" standalone= "no" ?><transaction>

  <body>

   <request>

    <trantyp>批量业务现存</trantyp>

    <acctnm> 0085213560 </acctnm>

    <acctno> 6225885517843413 </acctno>

    <avlbal> 201958.65 </avlbal>

    <accttyp> 0 </accttyp>

    <trantime> 20170801101030 </trantime>

    <currencytyp>cny</currencytyp>

    <trandesc/>

    <bal> 201958.65 </bal>

    <tranamt> 100000.00 </tranamt>

   </request>

  </body>

  <header>

   <msg>

    <sndtm> 101019 </sndtm>

    <msgcd>wcs0000200</msgcd>

    <seqnb> 632376531000009 </seqnb>

    <sndmbrcd> 5200 </sndmbrcd>

    <rcvmbrcd> 0000 </rcvmbrcd>

    <snddt> 20170821 </snddt>

    <sndappcd>cbs</sndappcd>

    <rcvappcd>wcs</rcvappcd>

    <calltyp>syn</calltyp>

   </msg>

   <ver> 1.0 </ver>

   <pnt>

    <sndtm> 101216 </sndtm>

    <sndmbrcd> 0000 </sndmbrcd>

    <rcvmbrcd> 0000 </rcvmbrcd>

    <snddt> 20170809 </snddt>

    <sndappcd>esb</sndappcd>

    <rcvappcd>wcs</rcvappcd>

   </pnt>

  </header>

</transaction>

修改前nodevalue: 5200

修改后nodevalue:5200hello

以上这篇string与xml互转以及从xml取节点值并修改的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/leisure_life/article/details/78931577

查看更多关于String与XML互转以及从XML取节点值并修改的方法的详细内容...

  阅读:46次