Java formaler Ausdruck aus XML Datei laden

OP #2972154
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
OP #2974997
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.