Java formaler Ausdruck aus XML Datei laden

#2972154
Lesenswert?

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
#2974997
Lesenswert?

ich habe den Fehler weiter eingegrenzt. Kann es sein, dass es zwei Arten 
von Leerzeichen gibt?
h  llo (1)

h  llo (2)

Ausdruck  Nr.  2 habe ich hier eingetippt, Ausdruck Nr 1 ist  der nicht 
in Java erkannte.
Bei Markierung der Leerzeichen mit der Maus muss man jeweils zwei 
Bewegungen machen.) Jedoch sind die Ausdrücke unterschiedlich lang.
Unten stehender Ausdruck Nr. 2 wird erkannt, Nr. 1 sollte aber auch mit 
\s\s gemached werden.

Viele Grüße

Chris

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren