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