Guten Tag!
Ich verwende eine XML Struktur
1 | ersetze.xml:
|
2 | <root>
|
3 | <ersetze>=<durch> = </durch> </ersetze>
|
4 | <ersetze>\w\w<durch> </durch> </ersetze>
|
5 |
|
6 | </root>
|
7 | um im Java einen String zu durchsuchen und entsprechend zu ersetzen. Dies wird durch folgenden Code realisiert:
|
8 | [c]
|
9 | private static String find_replace(String source) throws IOException,
|
10 | ParserConfigurationException, SAXException, XPathExpressionException {
|
11 | String result = new String(source);
|
12 | String ersetze = "";
|
13 | String durch = "";
|
14 | try {
|
15 | DocumentBuilderFactory factory_j =
|
16 | DocumentBuilderFactory.newInstance();
|
17 |
|
18 | factory_j.setNamespaceAware(true);
|
19 | DocumentBuilder builder_j = factory_j.newDocumentBuilder();
|
20 | Document doc_j = builder_j.parse("T:\\ersetze.xml");
|
21 | XPathFactory xfactory_j = XPathFactory.newInstance();
|
22 | XPath xpath_j = xfactory_j.newXPath();
|
23 | XPathExpression expr_j = xpath_j.compile("//ersetze");
|
24 | Object result_j = expr_j.evaluate(doc_j,
|
25 | XPathConstants.NODESET);
|
26 |
|
27 | NodeList nodes_j = (NodeList) result_j;
|
28 |
|
29 | for (int i = 0; i < nodes_j.getLength(); i++) {
|
30 |
|
31 | XPathExpression expr_j_se =
|
32 | xpath_j.compile("self::*/text()");
|
33 |
|
34 | Object result_j_se = expr_j_se.evaluate(nodes_j.item(i),
|
35 | XPathConstants.NODESET);
|
36 | NodeList nodes_j_se = (NodeList) result_j_se;
|
37 | ersetze = nodes_j_se.item(0).getNodeValue();
|
38 |
|
39 | expr_j_se = xpath_j.compile("self::*/durch/text()");
|
40 |
|
41 | result_j_se = expr_j_se.evaluate(nodes_j.item(i),
|
42 | XPathConstants.NODESET);
|
43 | nodes_j_se = (NodeList) result_j_se;
|
44 | durch = nodes_j_se.item(0).getNodeValue();
|
45 |
|
46 |
|
47 |
|
48 |
|
49 | Pattern replace = Pattern.compile(ersetze.trim());
|
50 | Matcher matcher2 = replace.matcher(result);
|
51 | result = matcher2.replaceAll(durch);
|
52 |
|
53 |
|
54 | }
|
55 |
|
56 | } catch (Exception ex) {
|
57 | ex.printStackTrace();
|
58 | }
|
59 |
|
60 | return result;
|
61 |
|
62 | }
|
Prinzipiell funktioniert das auch. Bei oben stehender XML Datei möchte
ich 2 Leerzeichen durch ein einfaches ersetzen. Der formale Ausdruck für
ein doppeltes Leerzeichen ist \w\w aber dennoch wird durch die XML datei
und oben stehende Java Funktion die gewünscht Ersetzung (2 Durch 1
Leerzeichen) nicht ausgeführt. Habt ihr eine Idee, was daran falsch ist?
Schöne Grüße ,
Chris