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语句等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)