# Frage zu XML Validation



## freehawk (20. Jun 2020)

Hallo zusammen,

ich habe eine ganz doofe Frage, aber ich komme nicht drauf.

Aus einem System bekomme ich einen String, der eigentlich einer XML Datei entsprechen soll. Leider geht aber das Wandeln in einen JDOM Object über den SAX Builder schief. Es liegt daran, dass das XML File nicht valid ist.


```
<rain>
    <3h>0.58</3h>
</rain>
```

Das <3h> ist ungültig. Kann mir bitte einer Sagen warum und was dazu die Regel ist, ich bin gerade am überlegen um die den String dahingehnd nochmal untersuche bevor ich ihn versuche zu wandeln. Am Ursprungsstring kann ich leider nichts ändern, da er aus einem Fremdsystem kommt.

Was ist daran ungültig? Ich habe eigentlich gefunden, dass als Elementnamen alle Zeichen verwendet werden dürfen nur keine Satzzeichen außer -.

Danke

Gruß
Markus


----------



## mrBrown (20. Jun 2020)

freehawk hat gesagt.:


> Was ist daran ungültig? Ich habe eigentlich gefunden, dass als Elementnamen alle Zeichen verwendet werden dürfen nur keine Satzzeichen außer -.


Das erste Zeichen muss ein Buchstabe oder ein _ sein.


----------



## freehawk (20. Jun 2020)

Danke!

Dann schauen ich mal wie ich das umbaue, damit das Funktioniert


----------



## freehawk (21. Jun 2020)

Nun hätte ich nochmals eine Frage:

Ich versuche nun mittels regex einfach an die XML Daten wenn der Elementname mit einer Zahl beginnt einen Unterstrich davor zu setzten.


```
xmlString = xmlString.replaceAll( "(<)[0-9]", "<_" );
xmlString = xmlString.replaceAll( "(<\\/)[0-9]", "</_" );
```

Leider wird auch die Zahl ersetzt anstatt nur der Teil in der Klammer.

Hat mir hier nochmals jemand einen Tipp?


----------



## Dompteur (21. Jun 2020)

```
xmlString = xmlString.replaceAll( "<([0-9])", "<_$1" );
    xmlString = xmlString.replaceAll( "<\\/([0-9])", "</_$1" );
```


----------



## looparda (21. Jun 2020)

```
xmlString = xmlString.replaceAll( "(</?)(\\d)([a-zA-Z]+)", "$1$3$2" );
```
oder eben dann

```
xmlString = xmlString.replaceAll( "(</?)(\\d)([a-zA-Z]+)", "$1_$2" );
```
wenn du es zu `<_3>` und `</_3>` umbenennen willst.


----------

