Alex Schneider: Abarbeitung externer Dokumente möglich?

Beitrag lesen

Hallo Franz,

ich habe ein Szenario erstellt, um Dir zu zeigen, was mein Problem ist:

Dokument 1:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE GRUPPE SYSTEM "C:\gruppe.dtd">
<GRUPPE>
 <PERSON>
  <VORNAME>Peter</VORNAME>
  <NAME>Müller</NAME>
 </PERSON>
 <PERSON>
  <VORNAME>Daniel</VORNAME>
  <NAME>Meyer</NAME>
 </PERSON>
 <PERSON>
  <VORNAME>Stefan</VORNAME>
  <NAME>Schneider</NAME>
 </PERSON>
</GRUPPE>

Dokument 2:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE GRUPPE SYSTEM "C:\gruppe.dtd">
<GRUPPE>
 <PERSON>
  <VORNAME>Thomas</VORNAME>
  <NAME>Kaiser</NAME>
 </PERSON>
 <PERSON>
  <VORNAME>Andreas</VORNAME>
  <NAME>Schulz</NAME>
 </PERSON>
</GRUPPE>

DTD C:\gruppe.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT GRUPPE (PERSON+)>
<!ELEMENT PERSON (VORNAME, NAME)>
<!ELEMENT VORNAME (#PCDATA)>
<!ELEMENT NAME (#PCDATA)>

----------------------------------------------
Das Ausgangsdokument sollte so aussehen:
(die Elementknoten heißen anders und Vorname und Name werden vertauscht)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TEAM SYSTEM "C:\team.dtd">
<TEAM>
 <MEMBER>
  <SURNAME>Müller</SURNAME>
  <FIRSTNAME>Peter</FIRSTNAME>
 </MEMBER>
 <MEMBER>
  <SURNAME>Meyer</SURNAME>
  <FIRSTNAME>Daniel</FIRSTNAME>
 </MEMBER>
 <MEMBER>
  <SURNAME>Schneider</SURNAME>
  <FIRSTNAME>Stefan</FIRSTNAME>
 </MEMBER>
 <MEMBER>
  <SURNAME>Kaiser</SURNAME>
  <FIRSTNAME>Thomas</FIRSTNAME>
 </MEMBER>
 <MEMBER>
  <SURNAME>Schulz</SURNAME>
  <FIRSTNAME>Andreas</FIRSTNAME>
 </MEMBER>
</TEAM>

DTD C:\team.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT TEAM (MEMBER+)>
<!ELEMENT MEMBER (SURNAME, FIRSTNAME)>
<!ELEMENT SURNAME (#PCDATA)>
<!ELEMENT FIRSTNAME (#PCDATA)>

Das XSL - OHNE Zusammenführung - könnte so aussehen:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <TEAM>
   <MEMBER>
    <xsl:for-each select="GRUPPE/PERSON/NAME">
     <SURNAME>
      <xsl:value-of select="."/>
     </SURNAME>
    </xsl:for-each>
    <xsl:for-each select="GRUPPE/PERSON/VORNAME">
     <FIRSTNAME>
      <xsl:value-of select="."/>
     </FIRSTNAME>
    </xsl:for-each>
   </MEMBER>
  </TEAM>
 </xsl:template>
</xsl:stylesheet>

Es stellen sich nach einigen unerfolgreichen Tests folgende Fragen:
a) ist das mit XSL und Co. überhaupt möglich?
 b) Wenn ja, womit?
 c) Wenn nein, womit dann?

Gruß
Alex