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 } |
