# XML-File (UTF-8 kodiert) erstellen - WIE?



## The_Marmot (23. Juli 2007)

Hallo,

ich habe:
- ein vorgegebenes Schema
- rund 29.000 HMI-Files (Hyperwave Metainformation) ähnlich wie XML
- den Auftrag nur 1 XML-File daraus zu erstellen (sprich: alle Infos aus der Masse an HMI-Files parsen und in ein XML-File klopfen)
- und keinen Plan, wie ich das ganze *UTF-8* kodiert als XML speichern kann.

Listing der Dateinamen, die dann abarbeiten, einlesen und als XML speichern geht reibungslos, aber wie kann ich die Daten UTF-8 kodiert in die XML speichern?

Hab nämlich alle Sonderzeichen als zb &auml; usw. in den HMI-Files stehen. Wenn ich die XML mit XMLSpy aufmache, regt er sich auf, dass Sachen wie &auml; usw. erst deklariert werden muessen.
Kann aber nix deklarieren, weil ich das Schema (XSD) nicht ändern darf - nix dazu und nix weg und nix umschreiben!

Bin für jede Hilfe dankbar!

PS: Google und Forensuche wurden natürlich zuerst zu Rate gezogen, aber erfolglos - vielleicht hab ich die Lösung übersehen.

PPS: Schreib das ganze in Java mit Eclipse als EU.


----------



## zerix (24. Juli 2007)

Hallo,

da hab ich erstmal eine Frage. Wie "konvertierst" du das ganze denn in XML?

MFG

zEriX


----------



## The_Marmot (24. Juli 2007)

Hej,

konvertiere via JDom.

Lg, Marmot


----------



## zerix (24. Juli 2007)

Du kannst ja die OutputStreams angeben wohin geschrieben wird. Ich würde dann vorschlagen, dass du die XML-Daten erstmal in einen normalen String ausgibst, dann die Daten ersetzt und sie dann erst in eine Datei schreibst.

Schau mal hier, es müsste so ähnlich auch mit JDom funktionieren.
http://www.tutorials.de/forum/java/276286-xmlstring-xml-format-ausgeben-lassen.html

MFG

zEriX


----------



## The_Marmot (24. Juli 2007)

Hej,

danke für deine schnelle Antwort. Das löst leider meine aktuelle Aufgabe nicht. Die Ausgabe als XML-File ist kein Problem - auch eventuelles Ersetzen usw. funktioniert prächtig. Ich glaub', dass da ein gröberer Fehler in der XSD liegt.

Trotzdem großen Dank für deine Hilfe und die raschen Antworten.

Lg, Marmot

--
(The hoary Marmot = das eisgraue Murmeltier)


----------



## zerix (24. Juli 2007)

Also dann verstehe ich dein Problem nicht. Du hast gesagt, dass du &auml; und so erst deklarieren musst, das aber nicht darfst, weil das XSD-File nicht geändert werden darf. Wenn du &auml; ersetzt, dann brauchst du es doch nicht zu deklarieren oder hab ich jetzt was falsch verstanden.

MFG

zEriX


----------



## The_Marmot (24. Juli 2007)

Hej,

die Sache ist so, dass folgende Dinge beim Validieren im XMLSpy als Fehler gehandelt werden:

"&auml;" wird als Fehler angegeben
"ä" wird als Fehler angegeben
"%c3%a4" wird zwar nicht als Fehler angegeben, aber auch nicht als Umlaut übersetzt

Das einzige, was funktioniert ist "ae" anstelle von "ä". Nun ist aber das Problem, dass es auch Zeichen wie "&aacute;" = "á" gibt. Diese werden ebenso als Fehler gehandelt. Wenn ich hier nun statt "á" nur "a" (ohne Accent) ausgeben lasse, würde es zwar funktionieren, aber die lieben Auftraggeber reissen mir dann den Kopf ab, da es sich hierbei um die Metainformationen einer Enzyklopädie handelt. Hier geht es um Familiennamen, Orte usw.

Habe leider keinen Plan, wie ich das lösen soll. 

Danke für deine Hilfe.
Alles liebe, Marmot


----------



## zerix (24. Juli 2007)

Dann sage ich mal, dass es nicht dieser Kodierung(UTF-8) nicht funktioniert. Wenn du das Schema nicht ändern darfst und UTF-8 vorgegeben ist. Da müsstest du eher auf UTF-16 gehen. Das einzige was mit noch einfallen würde wäre, falls du die XML-Datei wieder ausließt, dass du dir was überlegst wie du die Zeichen in die XML-Datei schreibst und dass du sie beim auslesen wieder "richtig konvertierst".

MFG

zEriX


----------



## Michael Engel (24. Juli 2007)

Ich weis zwar nicht wie es in Java geht aber du musst alle Felder in denen Umlaute vorkommen können in CDATA Blöcke schreiben:


```
<item>
		<title><![CDATA[Gr?nder f?r drei Jahre ins Gef?ngnis]]></title>
</item>
```


----------



## The_Marmot (24. Juli 2007)

Hej,

werd' mal CDATA versuchen. Sobald ich den *&%/$"! fertig hab, schreib ich ein Tutorial, wie und ob man das lösen kann. Ein Umsteigen auf UTF-16 ist, auf Grund des Auftraggebers, nicht möglich.

Wie gesagt, ich meld mich, sobald ich eine Lösung habe. Vielen lieben Dank für eure Hilfe!

Lg, Marmot

--
(Stefan)


----------



## torax13 (24. Juli 2007)

engelb hat gesagt.:


> Ich weis zwar nicht wie es in Java geht aber du musst alle Felder in denen Umlaute vorkommen können in CDATA Blöcke schreiben:
> 
> 
> ```
> ...



Tut mir leid hier wiedersprechen zu müßen. Du kannst doch in der XML Preambel

```
<?xml version="1.0" encoding="ISO-8859-1"?>
```
das Encoding angeben. In diesem Fall müßt hier ja dann UTF-8 drin stehen. Dann kanst Du Umlaute ganz normal im XML verwenden.

Mach ich öfter so, t eigentlich bestens. Mußt nur sicherstellen, das auch wirklich UTF8 dann drin ist.

Für das Umkodieren der &uml in den Umlaut gibts bestimmt ne Helperklasse. Sollte sich aber auch recht schnell händisch machen lassen.

Gruß


----------



## The_Marmot (24. Juli 2007)

Hej,

danke für die Antworten. Mir hat sich allerdings jetzt ein neues Problem (zusätzlich) aufgetan:

Ich muss einen TAG erstellen, der so ausschaut:


```
<VCard:auto-generated_for_wildcard>String</VCard:auto-generated_for_wildcard>
```

Das Problem hierbei ist der ":" nach VCard. Da schmeißt's des G'schisti-G'schasti immer, weil ":" ja als Trennzeichen interpretiert wird und hier nicht zulässig ist.

Hab in der Zwischenzeit verschiedene Variationen gehört/gelesen. Die einen sagen, es ist möglich, sollte aber nicht verwendet werden. Die anderen sagen, das funktioniere überhaupt nicht und wieder andere meinen, es geht mit Sicherheit. Habt ihr dafür eventuell eine Lösung?

Danke und lg, Steff


----------



## zerix (24. Juli 2007)

Das was torax13 gesagt hat, ist genau das was ich schon vorhin vorgeschlagen habe.

Ein Doppelpunkt darf nur drin stehen, wenn das vor dem Doppelpunkt ein Namespace ist.
http://www.sql-und-xml.de/xml-lernen/namespace-xml-document.html

Ich kenne deine Vorgaben zwar nicht, aber ich denke mal das VCard ein Namespace ist, den  du auch deklarieren musst, der müsste dann eigentlich auch im Schema-File angegeben sein. Also VCard ist nicht der Namespace, sondern vergleichbar mit einer Variablen.
z.b.

```
xmlns:VCard="www.namespace.de"
```

MFG

zEriX


----------



## The_Marmot (24. Juli 2007)

VCard ist wie folgt definiert:


```
<xs:complexType name="VCard">
	<xs:sequence>
		<xs:any namespace="http://www.w3.org/2001/vcard-rdf/3.0" processContents="lax" maxOccurs="unbounded"/>
	</xs:sequence>
</xs:complexType>
```

Lg, Steff


----------



## The_Marmot (25. Juli 2007)

Hej,

hab mal einen großen Teil fertiggebracht, was die Umlaute und das einbinden des Schemas angeht.

Umlaute ersetze ich mit .replace() und wenn's nicht passt, hab ich dann wenigestens noch ein bis zwei Tage was zu tun.

Mein aktuelles Problem bei den Schemata ist:

Der erste Teil ließ sich gut einbinden

```
<iss xmlns="http://www.bildung..." xmlns:bmb...="bmb...xsd" xmlns:VCard="http://www.w3.org/2001/vcard-rdf/3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
```

aber: was ich noch nicht reinbringen konnte war:

```
xsi:schemaLocation="http://www.bildung.... iss-v2006-08-01.xsd>
```

Da scheitere ich daran, xsi als Prefix setzen zu können. Kann mir da jemand von euch helfen oder einen Rat geben?

Großes Danke und lg, Steff


----------

