Mercurial > hg > mpdl-group
annotate software/eXist/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/util/XmlUtil.java @ 9:1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 22 Feb 2011 16:03:45 +0100 |
parents | 2396a569e446 |
children | 257f67be5c00 |
rev | line source |
---|---|
0 | 1 package de.mpg.mpiwg.berlin.mpdl.util; |
2 | |
3 import java.io.File; | |
4 import java.io.IOException; | |
5 import java.io.Reader; | |
6 import java.io.StringReader; | |
7 import java.io.StringWriter; | |
6
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
8 import java.io.Writer; |
0 | 9 import java.net.URL; |
10 import java.text.DateFormat; | |
11 import java.text.ParseException; | |
12 import java.text.SimpleDateFormat; | |
13 import java.util.ArrayList; | |
14 import java.util.Date; | |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
15 import java.util.Iterator; |
0 | 16 |
17 import javax.xml.XMLConstants; | |
18 import javax.xml.namespace.NamespaceContext; | |
19 import javax.xml.parsers.DocumentBuilder; | |
20 import javax.xml.parsers.DocumentBuilderFactory; | |
21 import javax.xml.transform.OutputKeys; | |
22 import javax.xml.transform.Source; | |
23 import javax.xml.transform.Transformer; | |
24 import javax.xml.transform.TransformerConfigurationException; | |
25 import javax.xml.transform.TransformerException; | |
26 import javax.xml.transform.TransformerFactory; | |
27 import javax.xml.transform.dom.DOMSource; | |
28 import javax.xml.transform.sax.SAXSource; | |
29 import javax.xml.transform.stream.StreamResult; | |
30 import javax.xml.validation.Schema; | |
31 import javax.xml.validation.SchemaFactory; | |
32 import javax.xml.validation.Validator; | |
33 import javax.xml.xpath.XPath; | |
34 import javax.xml.xpath.XPathConstants; | |
35 import javax.xml.xpath.XPathFactory; | |
36 | |
37 import net.sf.saxon.om.NodeInfo; | |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
38 import net.sf.saxon.query.QueryResult; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
39 import net.sf.saxon.trans.XPathException; |
0 | 40 |
41 import org.w3c.dom.Document; | |
6
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
42 import org.w3c.dom.DocumentType; |
0 | 43 import org.w3c.dom.NamedNodeMap; |
44 import org.w3c.dom.Node; | |
45 import org.w3c.dom.NodeList; | |
46 import org.xml.sax.InputSource; | |
47 import org.xml.sax.SAXException; | |
48 | |
49 import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException; | |
50 | |
51 public class XmlUtil { | |
52 static String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; | |
53 static String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource"; | |
54 static String W3C_XML_SCHEMA = XMLConstants.W3C_XML_SCHEMA_NS_URI; | |
55 | |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
56 private NamespaceContext namespaceContext; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
57 |
0 | 58 public static XmlUtil getInstance() { |
59 return new XmlUtil(); | |
60 } | |
61 | |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
62 public void setNsContext(String nsName) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
63 if (nsName.equals("general")) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
64 namespaceContext = getNsContextGeneral(); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
65 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
66 |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
67 public NamespaceContext getNsContextGeneral() { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
68 NamespaceContext nsContext = new NamespaceContext() { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
69 public String getNamespaceURI(String prefix) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
70 String uri; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
71 if (prefix.equals("xlink")) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
72 uri = "http://www.w3.org/1999/xlink"; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
73 else if (prefix.equals("xml")) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
74 uri = "http://www.w3.org/XML/1998/namespace"; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
75 else if (prefix.equals("dc")) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
76 uri = "http://purl.org/dc/elements/1.1/"; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
77 else if (prefix.equals("mpiwg")) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
78 uri = "http://www.mpiwg-berlin.mpg.de/ns/mpiwg"; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
79 else |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
80 uri = null; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
81 return uri; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
82 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
83 public String getPrefix(String uri) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
84 if (uri.equals("http://www.w3.org/1999/xlink")) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
85 return "xlink"; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
86 else if (uri.equals("http://www.w3.org/XML/1998/namespace")) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
87 return "xml"; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
88 else if (uri.equals("http://purl.org/dc/elements/1.1/")) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
89 return "dc"; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
90 else if (uri.equals("http://www.mpiwg-berlin.mpg.de/ns/mpiwg")) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
91 return "mpiwg"; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
92 else |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
93 return null; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
94 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
95 public Iterator getPrefixes(String namespace) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
96 return null; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
97 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
98 }; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
99 return nsContext; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
100 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
101 |
0 | 102 public Node doc(String url) throws ApplicationException { |
103 Node root = null; | |
104 try { | |
105 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); | |
106 dbf.setNamespaceAware(true); | |
107 DocumentBuilder db = dbf.newDocumentBuilder(); | |
108 InputSource inputSource = new InputSource(url); | |
109 Document doc = db.parse(inputSource); | |
110 root = doc.getFirstChild(); | |
111 } catch (Exception e) { | |
112 throw new ApplicationException(e); | |
113 } | |
114 return root; | |
115 } | |
116 | |
117 public Node parse(String xmlFileName) throws ApplicationException { | |
118 File xmlFile = new File(xmlFileName); | |
119 XmlUtil xmlUtil = XmlUtil.getInstance(); | |
120 Node retNode = null; | |
121 try { | |
122 retNode = xmlUtil.doc(xmlFile); | |
123 } catch (ApplicationException e) { | |
124 throw new ApplicationException("Your source file is not valid: " + e.getMessage()); | |
125 } | |
126 return retNode; | |
127 } | |
128 | |
129 public Node doc(File xmlFile) throws ApplicationException { | |
130 Node root = null; | |
131 try { | |
132 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); | |
133 dbf.setNamespaceAware(true); | |
134 DocumentBuilder db = dbf.newDocumentBuilder(); | |
135 Document doc = db.parse(xmlFile); | |
136 root = doc.getFirstChild(); | |
137 } catch (Exception e) { | |
138 throw new ApplicationException(e); | |
139 } | |
140 return root; | |
141 } | |
142 | |
143 public void validateByRelaxNG(File xmlFile, URL schemaUrl) throws ApplicationException { | |
144 System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory"); | |
145 SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI); | |
146 Schema schema = null; | |
147 try { | |
148 schema = factory.newSchema(schemaUrl); | |
149 } catch (SAXException e) { | |
150 throw new ApplicationException(e); | |
151 } | |
152 Validator validator = schema.newValidator(); | |
153 InputSource inputSource = new InputSource(xmlFile.getPath()); | |
154 Source source = new SAXSource(inputSource); | |
155 try { | |
156 validator.validate(source); | |
157 } catch (SAXException e) { | |
158 String message = e.getMessage(); | |
159 String text = "Your file is not valid against the RelaxNG schema: " + schemaUrl; | |
160 throw new ApplicationException(text + ":\n" + message); | |
161 } catch (IOException e) { | |
162 String message = e.getMessage(); | |
163 String text = "Your file is not valid against the RelaxNG schema: " + schemaUrl; | |
164 throw new ApplicationException(text + ": " + message); | |
165 } | |
166 } | |
167 | |
168 public String getNodeValue(Node node) { | |
169 String nodeValueStr = node.getNodeValue(); | |
170 if (nodeValueStr == null) | |
171 nodeValueStr = node.getTextContent(); | |
172 return nodeValueStr; | |
173 } | |
174 | |
175 public String getNodeAttributeValue(Node node, String attrName) { | |
176 NamedNodeMap attrs = node.getAttributes(); | |
177 if (attrs == null) { | |
178 return null; | |
179 } | |
180 Node attN = attrs.getNamedItem(attrName); | |
181 if (attN == null) { | |
182 return null; | |
183 } | |
184 return attN.getNodeValue(); | |
185 } | |
186 | |
187 public ArrayList<String> toStringArray(NodeList nodes) { | |
188 ArrayList<String> nodeValues = null; | |
189 for (int i=0; i< nodes.getLength(); i++) { | |
190 Node node = nodes.item(i); | |
191 if (nodeValues == null) | |
192 nodeValues = new ArrayList<String>(); | |
193 String nodeValue = node.getNodeValue(); | |
194 nodeValues.add(nodeValue); | |
195 } | |
196 return nodeValues; | |
197 } | |
198 | |
199 public String toXsDate(Date date) { | |
200 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); | |
201 String xsDateStr = dateFormat.format(date); | |
202 return xsDateStr; | |
203 } | |
204 | |
205 public Date toDate(String xsDateStr) throws ApplicationException { | |
206 Date retDate = null; | |
207 if (xsDateStr == null) | |
208 return null; | |
209 try { | |
210 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); | |
211 retDate = dateFormat.parse(xsDateStr); | |
212 } catch (ParseException e) { | |
213 throw new ApplicationException(e); | |
214 } | |
215 return retDate; | |
216 } | |
217 | |
218 public String evaluateToString(String xmlString, String xpathExpression, NamespaceContext nsContext) throws ApplicationException { | |
219 String resultStr = null; | |
220 ArrayList<String> strArray = evaluateToStringArray(xmlString, xpathExpression, nsContext); | |
221 if (strArray != null && strArray.size() > 0) | |
222 resultStr = strArray.get(0); | |
223 return resultStr; | |
224 } | |
225 | |
226 public String evaluateToString(InputSource inputSource, String xpathExpression, NamespaceContext nsContext) throws ApplicationException { | |
227 String resultStr = null; | |
228 ArrayList<String> strArray = evaluateToStringArray(inputSource, xpathExpression, nsContext); | |
229 if (strArray != null && strArray.size() > 0) | |
230 resultStr = strArray.get(0); | |
231 return resultStr; | |
232 } | |
233 | |
234 public String evaluateToString(Node node, String xpathExpression, NamespaceContext nsContext) throws ApplicationException { | |
235 String resultStr = null; | |
236 ArrayList<String> strArray = evaluateToStringArray(node, xpathExpression, nsContext); | |
237 if (strArray != null && strArray.size() > 0) | |
238 resultStr = strArray.get(0); | |
239 return resultStr; | |
240 } | |
241 | |
242 public ArrayList<String> evaluateToStringArray(String xmlString, String xpathExpression, NamespaceContext nsContext) throws ApplicationException { | |
243 Reader stringReader = new StringReader(xmlString); | |
244 InputSource inputSource = new InputSource(stringReader); | |
245 ArrayList<String> retStrArray = evaluateToStringArray(inputSource, xpathExpression, nsContext); | |
246 return retStrArray; | |
247 } | |
248 | |
249 public ArrayList<String> evaluateToStringArray(InputSource inputSource, String xpathExpression, NamespaceContext nsContext) throws ApplicationException { | |
250 ArrayList<String> retStrArray = null; | |
251 try { | |
252 XPath xpath = XPathFactory.newInstance().newXPath(); | |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
253 if (namespaceContext != null) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
254 xpath.setNamespaceContext(namespaceContext); |
0 | 255 if (nsContext != null) |
256 xpath.setNamespaceContext(nsContext); | |
257 Object resultObjects = xpath.evaluate(xpathExpression, inputSource, XPathConstants.NODESET); | |
258 if (resultObjects != null) { | |
259 retStrArray = nodesetToStringArray(resultObjects); | |
260 } | |
261 } catch (Exception e) { | |
262 throw new ApplicationException(e); | |
263 } | |
264 return retStrArray; | |
265 } | |
266 | |
267 public ArrayList<Node> evaluateToNodeArray(InputSource inputSource, String xpathExpression, NamespaceContext nsContext) throws ApplicationException { | |
268 ArrayList<Node> retArray = null; | |
269 try { | |
270 XPath xpath = XPathFactory.newInstance().newXPath(); | |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
271 if (namespaceContext != null) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
272 xpath.setNamespaceContext(namespaceContext); |
0 | 273 if (nsContext != null) |
274 xpath.setNamespaceContext(nsContext); | |
275 Object resultObjects = xpath.evaluate(xpathExpression, inputSource, XPathConstants.NODESET); | |
276 if (resultObjects != null) { | |
277 retArray = nodesetToNodeArray(resultObjects); | |
278 } | |
279 } catch (Exception e) { | |
280 throw new ApplicationException(e); | |
281 } | |
282 return retArray; | |
283 } | |
284 | |
285 public ArrayList<String> evaluateToStringArray(Node node, String xpathExpression, NamespaceContext nsContext) throws ApplicationException { | |
286 ArrayList<String> retStrArray = null; | |
287 try { | |
288 XPath xpath = XPathFactory.newInstance().newXPath(); | |
289 if (nsContext != null) | |
290 xpath.setNamespaceContext(nsContext); | |
291 Object resultObjects = xpath.evaluate(xpathExpression, node, XPathConstants.NODESET); | |
292 if (resultObjects != null) { | |
293 retStrArray = nodesetToStringArray(resultObjects); | |
294 } | |
295 } catch (Exception e) { | |
296 throw new ApplicationException(e); | |
297 } | |
298 return retStrArray; | |
299 } | |
300 | |
301 /* | |
302 * XPath evaluation: handles both, javax and also Saxon's implementation | |
303 * javax XPath evaluation: returns a NodeList | |
304 * Saxon's XPath evaluation: returns an ArrayList of TinyTextImpl (which could be casted to NodeInfo which could be handled as if it was a dom node) | |
305 */ | |
306 private ArrayList<String> nodesetToStringArray(Object nodesetObjects) { | |
307 ArrayList<String> retStrArray = null; | |
308 if (nodesetObjects instanceof NodeList) { | |
309 NodeList resultNodeList = (NodeList) nodesetObjects; | |
310 int length = resultNodeList.getLength(); | |
311 if (length > 0) { | |
312 retStrArray = new ArrayList<String>(); | |
313 for (int i=0; i<length; i++) { | |
314 Node n = resultNodeList.item(i); | |
315 String nodeValue = n.getNodeValue(); | |
316 if (nodeValue == null) | |
317 nodeValue = n.getTextContent(); | |
318 if (nodeValue != null) | |
319 retStrArray.add(nodeValue); | |
320 } | |
321 } | |
322 } else if (nodesetObjects instanceof ArrayList) { | |
323 ArrayList arrayListNodes = (ArrayList) nodesetObjects; | |
324 retStrArray = new ArrayList<String>(); | |
325 for (int i=0; i<arrayListNodes.size(); i++) { | |
326 Object arrayListNode = arrayListNodes.get(i); | |
327 if (arrayListNode instanceof Node) { | |
328 Node n = (Node) arrayListNode; | |
329 String nodeValue = n.getNodeValue(); | |
330 if (nodeValue == null) | |
331 nodeValue = n.getTextContent(); | |
332 if (nodeValue != null) | |
333 retStrArray.add(nodeValue); | |
334 } else if (arrayListNode instanceof NodeInfo) { | |
335 NodeInfo n = (NodeInfo) arrayListNode; | |
336 String nodeValue = n.getStringValue(); | |
337 retStrArray.add(nodeValue); | |
338 } | |
339 } | |
340 } | |
341 return retStrArray; | |
342 } | |
343 | |
344 /* | |
345 * XPath evaluation: handles both, javax and also Saxon's implementation | |
346 * javax XPath evaluation: returns a NodeList | |
347 * Saxon's XPath evaluation: returns an ArrayList of TinyTextImpl (which could be casted to NodeInfo which could be handled as if it was a dom node) | |
348 */ | |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
349 private ArrayList<Node> nodesetToNodeArray(Object nodesetObjects) throws ApplicationException { |
0 | 350 ArrayList<Node> retArray = null; |
351 if (nodesetObjects instanceof NodeList) { | |
352 NodeList resultNodeList = (NodeList) nodesetObjects; | |
353 int length = resultNodeList.getLength(); | |
354 if (length > 0) { | |
355 retArray = new ArrayList<Node>(); | |
356 for (int i=0; i<length; i++) { | |
357 Node n = resultNodeList.item(i); | |
358 retArray.add(n); | |
359 } | |
360 } | |
361 } else if (nodesetObjects instanceof ArrayList) { | |
362 ArrayList arrayListNodes = (ArrayList) nodesetObjects; | |
363 retArray = new ArrayList<Node>(); | |
364 for (int i=0; i<arrayListNodes.size(); i++) { | |
365 Object arrayListNode = arrayListNodes.get(i); | |
366 if (arrayListNode instanceof Node) { | |
367 Node n = (Node) arrayListNode; | |
368 retArray.add(n); | |
369 } else if (arrayListNode instanceof NodeInfo) { | |
370 NodeInfo n = (NodeInfo) arrayListNode; | |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
371 String xmlStr = ""; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
372 try { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
373 xmlStr = QueryResult.serialize(n); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
374 DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
375 DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
376 Node domNode = docBuilder.parse(new InputSource(new StringReader(xmlStr))).getDocumentElement(); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
377 retArray.add(domNode); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
378 } catch (Exception e) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
379 throw new ApplicationException(e); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
380 } |
0 | 381 } |
382 } | |
383 } | |
384 return retArray; | |
385 } | |
386 | |
6
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
387 |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
388 /* |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
389 * XPath evaluation: handles both, javax and also Saxon's implementation |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
390 * javax XPath evaluation: returns a NodeList |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
391 * Saxon's XPath evaluation: returns an ArrayList of TinyTextImpl (which could be casted to NodeInfo which could be handled as if it was a dom node) |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
392 */ |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
393 private String nodesetToXmlString(Object nodesetObjects) throws ApplicationException { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
394 Writer writer = new StringWriter(); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
395 try { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
396 if (nodesetObjects instanceof NodeList) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
397 NodeList resultNodeList = (NodeList) nodesetObjects; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
398 int length = resultNodeList.getLength(); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
399 if (length > 0) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
400 for (int i=0; i<length; i++) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
401 Node n = resultNodeList.item(i); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
402 serializeNode(n, writer, ""); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
403 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
404 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
405 } else if (nodesetObjects instanceof ArrayList) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
406 ArrayList arrayListNodes = (ArrayList) nodesetObjects; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
407 for (int i=0; i<arrayListNodes.size(); i++) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
408 Object arrayListNode = arrayListNodes.get(i); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
409 if (arrayListNode instanceof Node) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
410 Node n = (Node) arrayListNode; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
411 serializeNode(n, writer, ""); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
412 } else if (arrayListNode instanceof NodeInfo) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
413 NodeInfo n = (NodeInfo) arrayListNode; |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
414 String xmlStr = QueryResult.serialize(n); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
415 writer.write(xmlStr); |
6
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
416 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
417 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
418 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
419 writer.flush(); |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
420 } catch (XPathException e) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
421 throw new ApplicationException(e); |
6
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
422 } catch (IOException e) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
423 throw new ApplicationException(e); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
424 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
425 return writer.toString(); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
426 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
427 |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
428 public String evaluateToXmlString(String xmlString, String xpathExpression, NamespaceContext nsContext) throws ApplicationException { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
429 String resultStr = null; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
430 try { |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
431 XPathFactory xpathFactory = net.sf.saxon.xpath.XPathFactoryImpl.newInstance(); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
432 XPath xpath = xpathFactory.newXPath(); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
433 if (namespaceContext != null) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
434 xpath.setNamespaceContext(namespaceContext); |
6
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
435 if (nsContext != null) |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
436 xpath.setNamespaceContext(nsContext); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
437 Reader stringReader = new StringReader(xmlString); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
438 InputSource inputSource = new InputSource(stringReader); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
439 Object resultObjects = xpath.evaluate(xpathExpression, inputSource, XPathConstants.NODESET); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
440 if (resultObjects != null) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
441 resultStr = nodesetToXmlString(resultObjects); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
442 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
443 } catch (Exception e) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
444 throw new ApplicationException(e); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
445 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
446 return resultStr; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
447 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
448 |
9
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
449 public ArrayList<Node> evaluateToNodeArray(String xmlString, String xpathExpression, NamespaceContext nsContext) throws ApplicationException { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
450 ArrayList<Node> result = null; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
451 try { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
452 XPathFactory xpathFactory = net.sf.saxon.xpath.XPathFactoryImpl.newInstance(); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
453 XPath xpath = xpathFactory.newXPath(); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
454 if (namespaceContext != null) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
455 xpath.setNamespaceContext(namespaceContext); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
456 if (nsContext != null) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
457 xpath.setNamespaceContext(nsContext); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
458 Reader stringReader = new StringReader(xmlString); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
459 InputSource inputSource = new InputSource(stringReader); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
460 Object resultObjects = xpath.evaluate(xpathExpression, inputSource, XPathConstants.NODESET); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
461 if (resultObjects != null) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
462 result = nodesetToNodeArray(resultObjects); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
463 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
464 } catch (Exception e) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
465 throw new ApplicationException(e); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
466 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
467 return result; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
468 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
469 |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
470 public String insertAtCharPos(String xmlFragment, String charPosStr, String newXmlNodeStr) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
471 Integer charPos = new Integer(charPosStr); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
472 int strCharIndex = getCharIndex(xmlFragment, charPos); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
473 if (charPos == 0) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
474 strCharIndex = getCharIndex(xmlFragment, charPos + 1) - 1; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
475 String resultStr = xmlFragment.substring(0, strCharIndex) + newXmlNodeStr + xmlFragment.substring(strCharIndex); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
476 return resultStr; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
477 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
478 |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
479 private int getCharIndex(String xmlFragment, int charPos) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
480 int size = xmlFragment.length(); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
481 int counter = 0; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
482 int charCounter = 0; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
483 int counterLastChar = -1; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
484 boolean isEntity = false; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
485 boolean isElement = false; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
486 while (counter < size) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
487 char c = xmlFragment.charAt(counter); |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
488 switch (c) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
489 case '<': isElement = true; break; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
490 case '>': isElement = false; break; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
491 case '&': isEntity = true; break; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
492 case ';': isEntity = false; break; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
493 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
494 // count all chars which are not inside elements and entities |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
495 // if element closing char ">" is found it should not be counted as a char |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
496 // if an entity closing char ";" is found it should be counted cause the entity itself is one char long |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
497 if (! isEntity && ! isElement && !(c == '>')) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
498 charCounter++; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
499 counterLastChar = counter; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
500 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
501 if (charCounter == charPos) { |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
502 break; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
503 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
504 counter++; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
505 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
506 // input charPos was bigger than available chars: return the last available charPos |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
507 if (counter == size) |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
508 return counterLastChar + 1; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
509 return counter + 1; |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
510 } |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
511 |
1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
6
diff
changeset
|
512 |
6
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
513 /** |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
514 * <p> This will serialize a DOM <code>Node</code> to |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
515 * the supplied <code>Writer</code>. </p> |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
516 * |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
517 * @param node DOM <code>Node</code> to serialize. |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
518 * @param writer <code>Writer</code> to write to. |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
519 * @param indentLevel current indentation. |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
520 */ |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
521 private void serializeNode(Node node, Writer writer, String indentLevel) throws ApplicationException { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
522 try { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
523 // Determine action based on node type |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
524 switch (node.getNodeType()) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
525 case Node.DOCUMENT_NODE: |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
526 writer.write("<?xml version=\"1.0\"?>"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
527 writer.write("\n"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
528 // recurse on each child |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
529 NodeList nodes = node.getChildNodes(); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
530 if (nodes != null) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
531 for (int i=0; i<nodes.getLength(); i++) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
532 serializeNode(nodes.item(i), writer, ""); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
533 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
534 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
535 break; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
536 case Node.ELEMENT_NODE: |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
537 String name = node.getNodeName(); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
538 writer.write(indentLevel + "<" + name); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
539 NamedNodeMap attributes = node.getAttributes(); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
540 for (int i=0; i<attributes.getLength(); i++) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
541 Node current = attributes.item(i); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
542 writer.write(" " + current.getNodeName() + "=\"" + current.getNodeValue() + "\""); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
543 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
544 writer.write(">"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
545 // recurse on each child |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
546 NodeList children = node.getChildNodes(); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
547 if (children != null) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
548 if ((children.item(0) != null) && (children.item(0).getNodeType() == Node.ELEMENT_NODE)) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
549 writer.write("\n"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
550 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
551 for (int i=0; i<children.getLength(); i++) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
552 serializeNode(children.item(i), writer, indentLevel + " "); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
553 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
554 if ((children.item(0) != null) && (children.item(children.getLength()-1).getNodeType() == Node.ELEMENT_NODE)) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
555 writer.write(indentLevel); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
556 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
557 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
558 writer.write("</" + name + ">"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
559 writer.write("\n"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
560 break; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
561 case Node.TEXT_NODE: |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
562 writer.write(node.getNodeValue()); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
563 break; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
564 case Node.CDATA_SECTION_NODE: |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
565 writer.write("<![CDATA[" + node.getNodeValue() + "]]>"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
566 break; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
567 case Node.COMMENT_NODE: |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
568 writer.write(indentLevel + "<!-- " + node.getNodeValue() + " -->"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
569 writer.write("\n"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
570 break; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
571 case Node.PROCESSING_INSTRUCTION_NODE: |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
572 writer.write("<?" + node.getNodeName() + " " + node.getNodeValue() + "?>"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
573 writer.write("\n"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
574 break; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
575 case Node.ENTITY_REFERENCE_NODE: |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
576 writer.write("&" + node.getNodeName() + ";"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
577 break; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
578 case Node.DOCUMENT_TYPE_NODE: |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
579 DocumentType docType = (DocumentType)node; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
580 writer.write("<!DOCTYPE " + docType.getName()); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
581 if (docType.getPublicId() != null) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
582 System.out.print(" PUBLIC \"" + docType.getPublicId() + "\" "); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
583 } else { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
584 writer.write(" SYSTEM "); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
585 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
586 writer.write("\"" + docType.getSystemId() + "\">"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
587 writer.write("\n"); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
588 break; |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
589 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
590 } catch (IOException e) { |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
591 throw new ApplicationException(e); |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
592 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
593 } |
2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
0
diff
changeset
|
594 |
0 | 595 // TODO not used yet, test it |
596 public Node doc(File xmlFile, File schemaFile) throws ApplicationException { | |
597 Node root = null; | |
598 try { | |
599 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); | |
600 dbf.setNamespaceAware(true); | |
601 // dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); // TODO vielleicht doch wieder anschalten | |
602 dbf.setAttribute(JAXP_SCHEMA_SOURCE, schemaFile); | |
603 DocumentBuilder db = dbf.newDocumentBuilder(); | |
604 Document doc = db.parse(xmlFile); | |
605 root = doc.getFirstChild(); | |
606 } catch (Exception e) { | |
607 throw new ApplicationException(e); | |
608 } | |
609 return root; | |
610 } | |
611 | |
612 // TODO not used yet, test it | |
613 public void validateByRelaxNG(Node docNode, URL schemaUrl) throws ApplicationException { | |
614 // System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.XMLSyntaxSchemaFactory"); | |
615 System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory"); | |
616 SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI); | |
617 Schema schema = null; | |
618 try { | |
619 schema = factory.newSchema(schemaUrl); | |
620 } catch (SAXException e) { | |
621 throw new ApplicationException(e); | |
622 } | |
623 Validator validator = schema.newValidator(); | |
624 DOMSource source = new DOMSource(docNode); | |
625 try { | |
626 validator.validate(source); | |
627 } catch (SAXException e) { | |
628 throw new ApplicationException(e); | |
629 } catch (IOException e) { | |
630 throw new ApplicationException(e); | |
631 } | |
632 } | |
633 | |
634 // TODO not used yet, test it | |
635 public String toStringByTransformer(Node doc) throws ApplicationException { | |
636 String xmlString = null; | |
637 try { | |
638 Transformer transformer = TransformerFactory.newInstance().newTransformer(); | |
639 transformer.setOutputProperty(OutputKeys.INDENT, "yes"); | |
640 //initialize StreamResult with File object to save to file | |
641 StreamResult result = new StreamResult(new StringWriter()); | |
642 DOMSource source = new DOMSource(doc); | |
643 transformer.transform(source, result); | |
644 xmlString = result.getWriter().toString(); | |
645 } catch (TransformerConfigurationException e) { | |
646 throw new ApplicationException(e); | |
647 } catch (TransformerException e) { | |
648 throw new ApplicationException(e); | |
649 } | |
650 return xmlString; | |
651 } | |
652 } |