Transformieren von nicht xml Daten
derjuergen
- xsl
Hallo Forum!
Ich bitte bei folgendem Problem um eure Hilfe.
Ich habe eine Datei, die im wesentlichen aus Elementen besteht, die bis auf eines auch jeweils geschlossen werden.
Es ist ebenfalls kein Root Element vorhanden
und es gibt keine DOCTYPE Deklaration aber Entitys.
Aus dieser Datei möchte ich nun gültiges xml herstellen um im Endeffekt aus diesem eine neue xml-Datei zu erzeugen, bei der ich die Elemente und Inhalte neu ordne.
Wie kann ich dies mit einem XSL-Stylesheet tun; oder geht das gar nicht?
Bsp für ein Ausgangsdokument:
<element1>
<kind1>text</kind1>
<kind2>text</kind2>
<br>
<kind3>text</kind3>
</element1>
<element2>
<kind1>text</kind1>
<kind2>text ä text</kind2>
<br>
<kind3>text</kind3>
</element2>
Zwischenziel:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root SYSTEM ".\root.dtd">
<root>
<element1>
<kind1>text</kind1>
<kind2>text</kind2>
<br/>
<kind3>text</kind3>
</element1>
<element2>
<kind1>text</kind1>
<kind2>text ä text</kind2>
<br/>
<kind3>text</kind3>
</element2>
</root>
Ziel:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root SYSTEM ".\root.dtd">
<root>
<element1>
<hallo>textvon kind2</hallo>
<br/>
</element1>
</root>
Vielen Dank
DerJuergen
Ich habe eine Datei, die im wesentlichen aus Elementen besteht, die bis auf eines auch jeweils geschlossen werden.
Es ist ebenfalls kein Root Element vorhanden
und es gibt keine DOCTYPE Deklaration aber Entitys.Aus dieser Datei möchte ich nun gültiges xml herstellen um im Endeffekt aus diesem eine neue xml-Datei zu erzeugen, bei der ich die Elemente und Inhalte neu ordne.
Prinzipell geht das, nur ist der apply von Templates etwas schwierig, weil Deine Elemente element1-elementn heißen. Du müßtest also ein select auf [starts-with(name(node()),'element')] oder so ähnlich setzen
*ist bei seiner Antwort davon ausgegangen, daß du tatsächlich vorher gültiges XML erstellst*
Hi,
Soweit ich weiß, erfordert XSLT eine wohlgeformte Datei.
Ich habe eine Datei, die im wesentlichen aus Elementen besteht, die bis auf eines auch jeweils geschlossen werden.
Das wäre Voraussetzung.
Es ist ebenfalls kein Root Element vorhanden
Das ebenfalls.
und es gibt keine DOCTYPE Deklaration aber Entitys.
Ein Doctype wäre nicht zwingend erforderlich - aber wenn Entities benutzt werden, müssen diese ja definiert worden sein, also braucht es dann doch einen Doctype.
Aus dieser Datei möchte ich nun gültiges xml herstellen
Für diesen Schritt mußt Du meines Wissens eine andere Technik einsetzen (z.B. perl-Script)
um im Endeffekt aus diesem eine neue xml-Datei zu erzeugen, bei der ich die Elemente und Inhalte neu ordne.
Das geht dann per XSLT
cu,
Andreas
Hallo,
Im wesentlichen wurde schon an sich alles gesat, deshalb nur einige Ergänzungen:
Ich habe eine Datei, die im wesentlichen aus Elementen besteht, die bis auf eines auch jeweils geschlossen werden.
Ab da muss du alles vergessen.
Egal was du in XML machst Mindestkriterium ist Wohlgeformtheit, auch bei XML-Fragmenten!
Es ist ebenfalls kein Root Element vorhanden
Das wäre an sich kein Problem.
Du könntest dein XML-Fragment via Entity in eine XML-Datei laden
<!ENTITY documentfragment SYSTEM "fragment.xml">
<export-fragment-element>
&documentfragment;
</export-fragment-element>
und es gibt keine DOCTYPE Deklaration aber Entitys.
Wie gesagt, dann brauchst du zumindest eine DOCTYPE mit einer internen Untermenge.
Bsp für ein Ausgangsdokument:
<element1>
<kind1>text</kind1>
<kind2>text</kind2>
<br>
<kind3>text</kind3>
</element1>
<element2>
<kind1>text</kind1>
<kind2>text ä text</kind2>
<br>
<kind3>text</kind3>
</element2>
Das geht nicht mit XSLT, da dieses Fragment nicht wohlgeformt ist (<br>)
Grüße
Thomas