JAVA 如何获取并替换XML格式的字符串

JAVA 如何获取并替换XML格式的字符串,第1张

xml文件:

<xml version="10" encoding="UTF-8">

<transaction>

<body>

<request>

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

<acctNm>0085213560</acctNm>

<acctNo>6225885517843413</acctNo>

<avlBal>20195865</avlBal>

<acctTyp>0</acctTyp>

<tranTime>20170801101030</tranTime>

<currencyTyp>CNY</currencyTyp>

<tranDesc></tranDesc>

<bal>20195865</bal>

<tranAmt>10000000</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>10</ver>

<pnt>

<sndTm>101216</sndTm>

<sndMbrCd>0000</sndMbrCd>

<rcvMbrCd>0000</rcvMbrCd>

<sndDt>20170809</sndDt>

<sndAppCd>ESB</sndAppCd>

<rcvAppCd>WCS</rcvAppCd>

</pnt>

</header>

</transaction>

2 java实现实例:

public class Test {

/

@param document

            Document对象(读xml生成的)

@return String字符串

@throws Throwable

/

public String xmlToString(Document document) throws Throwable {

TransformerFactory ft = TransformerFactorynewInstance();

Transformer ff = ftnewTransformer();

ffsetOutputProperty("encoding", "GB2312");

ByteArrayOutputStream bos = new ByteArrayOutputStream();

fftransform(new DOMSource(document), new StreamResult(bos));

return bostoString();

}

/

@param xml形状的str串

@return Document 对象

/

public Document StringTOXml(String str) {

StringBuilder sXML = new StringBuilder();

sXMLappend(str);

DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance();

Document doc = null;

try {

InputStream is = new ByteArrayInputStream(sXMLtoString()getBytes("utf-8"));

doc = dbfnewDocumentBuilder()parse(is);

isclose();

} catch (Exception e) {

eprintStackTrace();

}

return doc;

}

/

@param document

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

/

public String getNodeValue(Document document, String nodePaht) {

XPathFactory xpfactory = XPathFactorynewInstance();

XPath path = xpfactorynewXPath();

String servInitrBrch = "";

try {

servInitrBrch = pathevaluate(nodePaht, document);

} catch (XPathExpressionException e) {

eprintStackTrace();

}

return servInitrBrch;

}

/

@param document

@param nodePath

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

@param vodeValue

            替换的值

/

public void setNodeValue(Document document, String nodePath, String vodeValue) {

XPathFactory xpfactory = XPathFactorynewInstance();

XPath path = xpfactorynewXPath();

Node node = null;

;

try {

node = (Node) pathevaluate(nodePath, document, XPathConstantsNODE);

} catch (XPathExpressionException e) {

eprintStackTrace();

}

nodesetTextContent(vodeValue);

}

3 测试

public static void main(String[] args) throws Throwable {

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

DocumentBuilder builder = DocumentBuilderFactorynewInstance()newDocumentBuilder();

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

Document document = builderparse(new File("axml"));

Test t = new Test();

// XML————》String

String str = txmlToString(document);

Systemoutprintln("str:" + str);

// String ————》XML

Document doc = tStringTOXml(str);

String nodePath = "/transaction/header/msg/sndMbrCd";

// getNodeValue

String nodeValue = tgetNodeValue(doc, nodePath);

Systemoutprintln("修改前nodeValue:" + nodeValue);

// setNodeValue

tsetNodeValue(doc, nodePath, nodeValue + "hello");

Systemoutprintln("修改后nodeValue:" + tgetNodeValue(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

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

121

测试结果:

str:<xml version="10" encoding="UTF-8" standalone="no"><transaction>

<body>

<request>

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

<acctNm>0085213560</acctNm>

<acctNo>6225885517843413</acctNo>

<avlBal>20195865</avlBal>

<acctTyp>0</acctTyp>

<tranTime>20170801101030</tranTime>

<currencyTyp>CNY</currencyTyp>

<tranDesc/>

<bal>20195865</bal>

<tranAmt>10000000</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>10</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

//输出XML流

private void outputXML() throws DTreeException {

DOMSource domSource = new DOMSource (doc);

StreamResult streamResult = new StreamResult(thisout);

try {

TransformerFactory transformerFactory=TransformerFactorynewInstance();

Transformer transformer=transformerFactorynewTransformer();

Properties properties = transformergetOutputProperties();

propertiessetProperty(OutputKeysENCODING, "gb2312 ");

propertiessetProperty(OutputKeysVERSION, "10 ");

transformersetOutputProperties(properties);

transformertransform(domSource,streamResult);

}

catch (TransformerConfigurationException tce) {

tceprintStackTrace();

throw new DTreeException( "TransformerConfigure Exception: "+tcegetMessage());

}

catch (TransformerException te) {

teprintStackTrace ();

throw new DTreeException( "Transformer Exception: "+tegetMessage());

}

}

用DOM4J来解析XML

SAXReader reader=new SAXReader();

Document document=readerread("XXXXML");

Element root=documentgetRootElement(); //获得根节点

Element element=rootelement("msg")//获得当前msg节点

String id=elementattributeValue("id");//得到ID值

String value=elementgetText();//获得文本节点的值

之后你可以用StringBuffer把上述内容组装成你想要的

dom4j的写法大概如下:

String xml = "上述的xml字符串";

Document doc = DocumentHelperparseText(xml);

Element rootElt = docgetRootElement();

//有了根节点以后就可以为所欲为了

String userName = rootEltelement("adaptor-attributes")attribute("user-name")asXML();

String password =  rootEltelement("adaptor-attributes")attribute("password")asXML();

java课程设计例子

Java如何获取文件编码格式

1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK。

 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。其实,如果项目运行的平台就是中文 *** 作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。

   对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:

          File file = new File(path);

          InputStream in= new javaioFileInputStream(file);

          byte[] b = new byte[3];

          inread(b);

          inclose();

          if (b[0] == -17 && b[1] == -69 && b[2] == -65)

              Systemoutprintln(filegetName() + ":编码为UTF-8");

          else

              Systemoutprintln(filegetName() + ":可能是GBK,也可能是其他编码");

2:若想实现更复杂的文件编码检测,可以使用一个开源项目cpdetector,它所在的网址是:>

1、JDOM生成和解析XML

为减少DOM、SAX的编码量,出现了JDOM

优点:20-80原则,极大减少了代码量。

使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档

2、SAX生成和解析XML文档

为解决DOM的问题,出现了SAX,SAX 事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时发送事件,程序员编写响应这些事件的代码,保存数据。

优点:不用事先调入整个文档,占用资源少。SAX解析器代码比DOM解析器代码小,适于Applet下载。

缺点:不是持久的,事件过后若没保存数据,那么数据就丢了。无状态性,从事件中只能得到文本,但不知该文本属于哪个元素。

使用场合:Applet。只需XML文档的少量内容,很少回头访问,机器内存少。

3、DOM生成和解析XML文档

为XML文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来 *** 作这个树结构。

优点:整个文档树在内存中,便于 *** 作,支持删除、修改、重新排列等多种功能。

缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间。

使用场合:一旦解析了文档还需多次访问这些数据,硬件资源充足(内存、CPU)。

4、DOM4J生成和解析XML文档

DOM4J

是一个非常非常优秀的Java XML

API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J

来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。

以上就是关于JAVA 如何获取并替换XML格式的字符串全部的内容,包括:JAVA 如何获取并替换XML格式的字符串、java生产xml时如何指定xml的编码格式 下面是我生成xml文件的代码 while(rs.next()) { Element childElemen、java中如何从XML文件中取出一整条xml语句等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9826583.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存