1
|
-package com.tianbo.util.XML;
|
|
|
2
|
-
|
|
|
3
|
-
|
|
|
4
|
-
|
|
|
5
|
-import org.jdom.Document;
|
|
|
6
|
-import org.jdom.Element;
|
|
|
7
|
-import org.jdom.JDOMException;
|
|
|
8
|
-import org.jdom.input.SAXBuilder;
|
|
|
9
|
-import org.slf4j.Logger;
|
|
|
10
|
-import org.slf4j.LoggerFactory;
|
|
|
11
|
-import org.xml.sax.InputSource;
|
|
|
12
|
-
|
|
|
13
|
-import java.io.IOException;
|
|
|
14
|
-import java.io.StringReader;
|
|
|
15
|
-import java.util.*;
|
|
|
16
|
-
|
|
|
17
|
-public class XMLParse {
|
|
|
18
|
- private static final Logger logger = LoggerFactory.getLogger(XMLParse.class);
|
|
|
19
|
- private static String xmlString;
|
|
|
20
|
- private static Document document;
|
|
|
21
|
- private static SAXBuilder builder;
|
|
|
22
|
- private static Element root;
|
|
|
23
|
- private static LinkedList<SubNode> listNode;
|
|
|
24
|
- private static StringReader xmlReader;
|
|
|
25
|
- private static InputSource xmlSource;
|
|
|
26
|
- private static List<Map> maps = new ArrayList<Map>();
|
|
|
27
|
- private static Map<String,Map> allElementValue = new HashMap<String, Map>();
|
|
|
28
|
- private static int domCount=0;
|
|
|
29
|
- private String value;
|
|
|
30
|
-
|
|
|
31
|
- public XMLParse() {
|
|
|
32
|
- }
|
|
|
33
|
- public XMLParse(String XmlString) {
|
|
|
34
|
- builder = new SAXBuilder();
|
|
|
35
|
- root = null;
|
|
|
36
|
- listNode = new LinkedList();
|
|
|
37
|
- value = "";
|
|
|
38
|
- document =new Document();
|
|
|
39
|
- xmlString = XmlString;
|
|
|
40
|
- }
|
|
|
41
|
-
|
|
|
42
|
- public Map getAllValuesFromXmlString() throws Exception{
|
|
|
43
|
- try {
|
|
|
44
|
- xmlReader = new StringReader(xmlString);
|
|
|
45
|
- xmlSource = new InputSource(xmlReader);
|
|
|
46
|
- document = builder.build(xmlSource);
|
|
|
47
|
- root = document.getRootElement();
|
|
|
48
|
- getElements(root);
|
|
|
49
|
-
|
|
|
50
|
- }catch (Exception var17) {
|
|
|
51
|
- var17.printStackTrace();
|
|
|
52
|
- throw var17;
|
|
|
53
|
- } finally {
|
|
|
54
|
- listNode.clear();
|
|
|
55
|
- document = null;
|
|
|
56
|
- root = null;
|
|
|
57
|
-// builder = null;
|
|
|
58
|
-
|
|
|
59
|
- }
|
|
|
60
|
- return allElementValue;
|
|
|
61
|
- }
|
|
|
62
|
-
|
|
|
63
|
- public void getElements (Element element) throws Exception{
|
|
|
64
|
- try {
|
|
|
65
|
- domCount++;
|
|
|
66
|
- List<Element> Children = element.getChildren();
|
|
|
67
|
- if (Children.size()>0){
|
|
|
68
|
- for (Element elements : Children){
|
|
|
69
|
- if(elements.getChildren().size()>0){
|
|
|
70
|
- getElements(elements);
|
|
|
71
|
- }else {//确定是最末节点了 开始取末节点的数据
|
|
|
72
|
- String childName = elements.getName();
|
|
|
73
|
- String childValue = elements.getText();
|
|
|
74
|
- Map<String,String> childMap = new HashMap<String, String>(); //用map存储每个最终节点的值
|
|
|
75
|
- childMap.put(childName,childValue);
|
|
|
76
|
- allElementValue.put(domCount+elements.getParentElement().getName()+"-"+childName,childMap);
|
|
|
77
|
- }
|
|
|
78
|
- }
|
|
|
79
|
- }
|
|
|
80
|
-
|
|
|
81
|
-
|
|
|
82
|
- }catch (Exception e){
|
|
|
83
|
- e.printStackTrace();
|
|
|
84
|
- throw e;
|
|
|
85
|
- }
|
|
|
86
|
-
|
|
|
87
|
- }
|
|
|
88
|
-
|
|
|
89
|
- public List<Map> getNodeValuesFromXmlStringForPffm(String xmlNodePath) throws Exception{
|
|
|
90
|
- String[] nodes = xmlNodePath.split("/");
|
|
|
91
|
- try {
|
|
|
92
|
- xmlReader = new StringReader(xmlString);
|
|
|
93
|
- xmlSource = new InputSource(xmlReader);
|
|
|
94
|
- document = builder.build(xmlSource);
|
|
|
95
|
- List<Map> maps = new ArrayList<Map>();
|
|
|
96
|
- for(int i = 1; i < nodes.length; ++i) {
|
|
|
97
|
- SubNode snode;
|
|
|
98
|
-
|
|
|
99
|
- if (i >1) {
|
|
|
100
|
- snode = (SubNode)listNode.getLast();
|
|
|
101
|
- List<Element> eList = snode.getElement().getChildren(nodes[i]); //这里得到所有Arrival节点 从ArrivalEvent开始取
|
|
|
102
|
- if (eList != null && eList.size() > 0) {
|
|
|
103
|
- SubNode s1 = new SubNode((Element)eList.get(0));
|
|
|
104
|
- listNode.add(s1);
|
|
|
105
|
-
|
|
|
106
|
- }
|
|
|
107
|
- if(eList != null && eList.size() > 1 && i==nodes.length-1){ //只有进入的最尾节点的时候再循环去取同名下的一对多的ELEMENT所有子节点
|
|
|
108
|
-
|
|
|
109
|
- for (Element element : eList){ //开始取出每个ArrivalEven每个字节点
|
|
|
110
|
- List<Element> elements=element.getChildren();
|
|
|
111
|
- Map<String,String> childMap = new HashMap<String, String>(); //用map存储AssociatedTransportCargo节点下每个值
|
|
|
112
|
- for (Element childElements : elements){
|
|
|
113
|
- if (childElements.getChildren().size()>1){
|
|
|
114
|
- for (Element grandChildrenEle : (List<Element>)childElements.getChildren()){ //IncludedMasterConsignment重复节点
|
|
|
115
|
- String childName = grandChildrenEle.getName();
|
|
|
116
|
- String childValue = grandChildrenEle.getText();
|
|
|
117
|
- childMap.put(childName,childValue);
|
|
|
118
|
- }
|
|
|
119
|
- }
|
|
|
120
|
- String childName = childElements.getName();
|
|
|
121
|
- String childValue = childElements.getText();
|
|
|
122
|
- childMap.put(childName,childValue);
|
|
|
123
|
- logger.info(childValue);
|
|
|
124
|
- }
|
|
|
125
|
- maps.add(childMap);
|
|
|
126
|
- }
|
|
|
127
|
- }
|
|
|
128
|
-
|
|
|
129
|
- } else if (1 == i) {
|
|
|
130
|
- root = document.getRootElement();
|
|
|
131
|
- snode = new SubNode(root);
|
|
|
132
|
- listNode.add(snode);
|
|
|
133
|
- }
|
|
|
134
|
-
|
|
|
135
|
- }
|
|
|
136
|
- return maps;
|
|
|
137
|
- } catch (Exception var17) {
|
|
|
138
|
- var17.printStackTrace();
|
|
|
139
|
- throw var17;
|
|
|
140
|
- } finally {
|
|
|
141
|
- listNode.clear();
|
|
|
142
|
- document = null;
|
|
|
143
|
- root = null;
|
|
|
144
|
-// builder = null;
|
|
|
145
|
- nodes = null;
|
|
|
146
|
- }
|
|
|
147
|
-
|
|
|
148
|
- }
|
|
|
149
|
-
|
|
|
150
|
- /**
|
|
|
151
|
- * 取一对多关系的节点下的所有子节点的属性名 和 值,//这个方法作为FWB解析使用
|
|
|
152
|
- * @return 返回重复节点下的所有节点数据
|
|
|
153
|
- * @throws Exception
|
|
|
154
|
- */
|
|
|
155
|
- public List<Map> getNodeValuesFromXmlString(String xmlNodePath) throws Exception{
|
|
|
156
|
- String[] nodes = xmlNodePath.split("/");
|
|
|
157
|
- try {
|
|
|
158
|
- xmlReader = new StringReader(xmlString);
|
|
|
159
|
- xmlSource = new InputSource(xmlReader);
|
|
|
160
|
- document = builder.build(xmlSource);
|
|
|
161
|
- List<Map> maps = new ArrayList<Map>();
|
|
|
162
|
- for(int i = 1; i < nodes.length; ++i) {
|
|
|
163
|
- SubNode snode;
|
|
|
164
|
-
|
|
|
165
|
- if (i >1) {
|
|
|
166
|
- snode = (SubNode)listNode.getLast();
|
|
|
167
|
- List<Element> eList = snode.getElement().getChildren(nodes[i]); //这里等于3的时候得到associatedPary节点 两个,下面应该循环这两个element,取他下面的所有children
|
|
|
168
|
- if (eList != null && eList.size() > 0) {
|
|
|
169
|
- SubNode s1 = new SubNode((Element)eList.get(0));
|
|
|
170
|
- listNode.add(s1);
|
|
|
171
|
-
|
|
|
172
|
- }
|
|
|
173
|
- if(eList != null && eList.size() > 1 && i==nodes.length-1){ //只有进入的最尾节点的时候再循环去取同名下的一对多的ELEMENT所有子节点
|
|
|
174
|
-
|
|
|
175
|
- for (Element element : eList){ //开始取出每个字节点
|
|
|
176
|
- List<Element> elements=element.getChildren();
|
|
|
177
|
- Map<String,String> childMap = new HashMap<String, String>(); //用map存储每个值
|
|
|
178
|
- for (Element childElements : elements){
|
|
|
179
|
- if (childElements.getChildren().size()>1){
|
|
|
180
|
- for (Element grandChildrenEle : (List<Element>)childElements.getChildren()){
|
|
|
181
|
- String childName = grandChildrenEle.getName();
|
|
|
182
|
- String childValue = grandChildrenEle.getText();
|
|
|
183
|
- childMap.put(childName,childValue);
|
|
|
184
|
- }
|
|
|
185
|
- }
|
|
|
186
|
- String childName = childElements.getName();
|
|
|
187
|
- String childValue = childElements.getText();
|
|
|
188
|
- childMap.put(childName,childValue);
|
|
|
189
|
- logger.info(childValue);
|
|
|
190
|
- }
|
|
|
191
|
- maps.add(childMap);
|
|
|
192
|
- }
|
|
|
193
|
- }
|
|
|
194
|
-
|
|
|
195
|
- } else if (1 == i) {
|
|
|
196
|
- root = document.getRootElement();
|
|
|
197
|
- snode = new SubNode(root);
|
|
|
198
|
- listNode.add(snode);
|
|
|
199
|
- }
|
|
|
200
|
-
|
|
|
201
|
- }
|
|
|
202
|
- return maps;
|
|
|
203
|
- } catch (Exception var17) {
|
|
|
204
|
- var17.printStackTrace();
|
|
|
205
|
- throw var17;
|
|
|
206
|
- } finally {
|
|
|
207
|
- listNode.clear();
|
|
|
208
|
- document = null;
|
|
|
209
|
- root = null;
|
|
|
210
|
-// builder = null;
|
|
|
211
|
- nodes = null;
|
|
|
212
|
- }
|
|
|
213
|
-
|
|
|
214
|
- }
|
|
|
215
|
-
|
|
|
216
|
- /***
|
|
|
217
|
- * 获取单一节点的值
|
|
|
218
|
- * @return 单一节点值
|
|
|
219
|
- * @throws Exception
|
|
|
220
|
- */
|
|
|
221
|
- public final String getNodeValueFromXmlString(String xmlNodePath) throws Exception {
|
|
|
222
|
- String[] nodes = xmlNodePath.split("/");
|
|
|
223
|
- try {
|
|
|
224
|
- xmlReader = new StringReader(xmlString);
|
|
|
225
|
- xmlSource = new InputSource(xmlReader);
|
|
|
226
|
- document = builder.build(xmlSource);
|
|
|
227
|
-
|
|
|
228
|
- for(int i = 1; i < nodes.length; ++i) {
|
|
|
229
|
- SubNode snode;
|
|
|
230
|
- if (i > 1) {
|
|
|
231
|
- snode = (SubNode)listNode.getLast();
|
|
|
232
|
- List<Element> eList = snode.getElement().getChildren(nodes[i]);
|
|
|
233
|
- if (eList != null && eList.size() > 0) {
|
|
|
234
|
- SubNode s1 = new SubNode((Element)eList.get(0));
|
|
|
235
|
- listNode.add(s1);
|
|
|
236
|
- }
|
|
|
237
|
- } else if (1 == i) {
|
|
|
238
|
- root = document.getRootElement();
|
|
|
239
|
- snode = new SubNode(root);
|
|
|
240
|
- listNode.add(snode);
|
|
|
241
|
- }
|
|
|
242
|
- }
|
|
|
243
|
-
|
|
|
244
|
- SubNode n = (SubNode)listNode.getLast();
|
|
|
245
|
- value = n.getElement().getText();
|
|
|
246
|
- n = null;
|
|
|
247
|
- return value;
|
|
|
248
|
- } catch (Exception var17) {
|
|
|
249
|
- var17.printStackTrace();
|
|
|
250
|
- throw var17;
|
|
|
251
|
- } finally {
|
|
|
252
|
- listNode.clear();
|
|
|
253
|
- document = null;
|
|
|
254
|
- root = null;
|
|
|
255
|
-// builder = null;
|
|
|
256
|
- nodes = null;
|
|
|
257
|
- }
|
|
|
258
|
-
|
|
|
259
|
- }
|
|
|
260
|
-
|
|
|
261
|
- public static final String getNodeAttribute(String xmlFile, String xmlNodePath, String attributeName, String defaultValue) {
|
|
|
262
|
- String[] nodes = xmlNodePath.split("/");
|
|
|
263
|
- new Document();
|
|
|
264
|
- SAXBuilder builder = new SAXBuilder();
|
|
|
265
|
- Element root = null;
|
|
|
266
|
- LinkedList<SubNode> listNode = new LinkedList();
|
|
|
267
|
- String value = "";
|
|
|
268
|
-
|
|
|
269
|
- Document document;
|
|
|
270
|
- try {
|
|
|
271
|
- document = builder.build(xmlFile);
|
|
|
272
|
-
|
|
|
273
|
- for(int i = 1; i < nodes.length; ++i) {
|
|
|
274
|
- SubNode snode;
|
|
|
275
|
- if (i > 1) {
|
|
|
276
|
- snode = (SubNode)listNode.getLast();
|
|
|
277
|
- List<Element> eList = snode.getElement().getChildren(nodes[i]);
|
|
|
278
|
- if (eList != null && eList.size() > 0) {
|
|
|
279
|
- SubNode s1 = new SubNode((Element)eList.get(0));
|
|
|
280
|
- listNode.add(s1);
|
|
|
281
|
- }
|
|
|
282
|
- } else if (1 == i) {
|
|
|
283
|
- root = document.getRootElement();
|
|
|
284
|
- snode = new SubNode(root);
|
|
|
285
|
- listNode.add(snode);
|
|
|
286
|
- }
|
|
|
287
|
- }
|
|
|
288
|
-
|
|
|
289
|
- SubNode n = (SubNode)listNode.getLast();
|
|
|
290
|
- value = n.getElement().getAttributeValue(attributeName, defaultValue);
|
|
|
291
|
- n = null;
|
|
|
292
|
- } catch (JDOMException var18) {
|
|
|
293
|
- var18.printStackTrace();
|
|
|
294
|
- } catch (IOException var19) {
|
|
|
295
|
- var19.printStackTrace();
|
|
|
296
|
- } finally {
|
|
|
297
|
- listNode.clear();
|
|
|
298
|
- document = null;
|
|
|
299
|
- root = null;
|
|
|
300
|
- builder = null;
|
|
|
301
|
- nodes = null;
|
|
|
302
|
- }
|
|
|
303
|
-
|
|
|
304
|
- System.out.println("key=" + xmlNodePath + " node attrivte value=" + value);
|
|
|
305
|
- return value;
|
|
|
306
|
- }
|
|
|
307
|
-} |
|
|