Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst XSL Transformation

Mitglied: it-frosch

it-frosch (Level 2) - Jetzt verbinden

06.08.2009, aktualisiert 19:47 Uhr, 3567 Aufrufe, 4 Kommentare

Hallo,

Ich möchte eine XML Datei in eine CSV Datei umwandeln. Die Elemente eines XML Datensatz soll durch Komma getrennt in einer Zeile stehen.
Das ist prinzipiell klar.

Allerdings haben enthält nicht jeder XML Datensatz alle Elemente.
So sieht ein vollständiger Datensatz aus:

01.
<satz> 
02.
<nr>1</nr> 
03.
<wert1>eins</wert1> 
04.
<wert2>eins</wert2> 
05.
<wert3>eins</wert3> 
06.
<wert4>eins</wert4> 
07.
<wert5>eins</wert5> 
08.
<wert6>eins</wert6> 
09.
<betrag>40</betrag> 
10.
</satz>
In manchen Datensätzen fehlen jedoch ein oder mehrere "wert" Elemente.
Diese fehlenden Elemente möchte ich jetzt mit einem Platzhalter z.B. "Leer" in der CSV Datei ersetzen damit die Anzahl der Spalten stimmt.

Mit xsl:if und xsl:choose habe ich schon experimentiert aber mir fehlt irgendwie so etwas wie xsl:if exist ...... else .

Ich hoffe mein Problem ist klar geworden. Es wäre schön wenn mir jemand einen Tipp geben könnte.

Danke schon mal.
Mitglied: nxclass
07.08.2009 um 08:18 Uhr
evtl. so:

01.
<xsl:choose> 
02.
  <xsl:when test="string-length(//SATZ/WERT1) &gt; 0"> 
03.
     <xsl:value-of select="//SATZ/WERT1" /> 
04.
  </xsl:when> 
05.
  <xsl:otherwise> 
06.
    <xsl:text>NULL</xsl:text> 
07.
  </xsl:otherwise> 
08.
</xsl:choose>
oder man arbeitet mit den templates:
01.
<xsl:template match="//SATZ/WERT1"> 
02.
  <xsl:value-of select="//SATZ/WERT1" /> 
03.
</xsl:template> 
04.
 
05.
<xsl:apply-templates select="//SATZ/WERT1" />
Bitte warten ..
Mitglied: it-frosch
10.08.2009 um 17:10 Uhr
Hallo nxclass,

vielen Dank für deine Antwort. Leider komme ich auch nach einigen Stunden rumprobieren nicht weiter.

01.
<xsl:stylesheet version=\"1.0\" 
02.
xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"> 
03.
<xsl:output method=\"text\" encoding=\"iso-8859-1\"/> 
04.
 
05.
<xsl:strip-space elements=\"*\" /> 
06.
 
07.
<xsl:template match=\"/SATZ/child::*\"> 
08.
<xsl:for-each select=\"child::*\"> 
09.
 
10.
<xsl:choose> 
11.
  <xsl:when test=\"string-length(NR) &gt; 0\">  
12.
    <xsl:value-of select=\"NR\" />  
13.
  </xsl:when>  
14.
   <xsl:otherwise> 
15.
    <xsl:text>NULL</xsl:text> 
16.
  </xsl:otherwise> 
17.
</xsl:choose> 
18.
 
19.
<xsl:choose> 
20.
  <xsl:when test=\"string-length(WERT1) &gt; 0\">  
21.
    <xsl:value-of select=\"WERT1\" />  
22.
  </xsl:when>  
23.
   <xsl:otherwise> 
24.
    <xsl:text>NULL</xsl:text> 
25.
  </xsl:otherwise> 
26.
</xsl:choose> 
27.
 
28.
<xsl:choose> 
29.
<xsl:when test=\"string-length(WERT2) &gt; 0\">  
30.
    <xsl:value-of select=\"WERT2\" />  
31.
  </xsl:when>  
32.
   <xsl:otherwise> 
33.
    <xsl:text>NULL</xsl:text> 
34.
  </xsl:otherwise> 
35.
</xsl:choose> 
36.
 
37.
<xsl:choose> 
38.
<xsl:when test=\"string-length(WERT3) &gt; 0\">  
39.
    <xsl:value-of select=\"WERT3\" />  
40.
  </xsl:when>  
41.
   <xsl:otherwise> 
42.
    <xsl:text>NULL</xsl:text> 
43.
  </xsl:otherwise> 
44.
</xsl:choose> 
45.
 
46.
<xsl:choose> 
47.
<xsl:when test=\"string-length(WERT4) &gt; 0\">  
48.
    <xsl:value-of select=\"WERT4l\" />  
49.
  </xsl:when>  
50.
   <xsl:otherwise> 
51.
    <xsl:text>NULL</xsl:text> 
52.
  </xsl:otherwise> 
53.
</xsl:choose> 
54.
 
55.
<xsl:choose> 
56.
<xsl:when test=\"string-length(WERT5) &gt; 0\">  
57.
    <xsl:value-of select=\"WERT5\" />  
58.
  </xsl:when>  
59.
   <xsl:otherwise> 
60.
    <xsl:text>NULL</xsl:text> 
61.
  </xsl:otherwise> 
62.
</xsl:choose> 
63.
 
64.
<xsl:choose> 
65.
<xsl:when test=\"string-length(WERT5) &gt; 0\">  
66.
    <xsl:value-of select=\"WERT5\" />  
67.
  </xsl:when>  
68.
   <xsl:otherwise> 
69.
    <xsl:text>NULL</xsl:text> 
70.
  </xsl:otherwise> 
71.
</xsl:choose> 
72.
 
73.
 
74.
<xsl:if test=\"position() != last()\">\"<xsl:value-of select=\"normalize-space(.)\"/>\",</xsl:if> 
75.
<xsl:if test=\"position()  = last()\">\"<xsl:value-of select=\"normalize-space(.)\"/>\"<xsl:text>&#xD;</xsl:text> 
76.
</xsl:if> 
77.
</xsl:for-each> 
78.
</xsl:template> 
79.
 
80.
</xsl:stylesheet>

Aber das funktioniert so gar nicht. Es werden weder Trennzeichen gesetzt noch sind die fehlenden Element mit NULL gekennzeichnet. Hast du noch einen Tipp was ich falsch mache?
Bitte warten ..
Mitglied: nxclass
10.08.2009 um 20:41 Uhr
XML:
01.
<file> 
02.
<satz> 
03.
<nr>1</nr> 
04.
<wert1>eins</wert1> 
05.
<wert2>zwei</wert2> 
06.
<wert3>drei</wert3> 
07.
<betrag>40</betrag> 
08.
</satz> 
09.
<satz> 
10.
<nr>1</nr> 
11.
<wert1>eins</wert1> 
12.
<wert3>drei</wert3> 
13.
<betrag>40</betrag> 
14.
</satz> 
15.
</file>
XSL:
01.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
02.
    <xsl:output method="text" encoding="iso-8859-1"/> 
03.
 
04.
    <xsl:template match="nr"> 
05.
        <xsl:value-of select="." /><xsl:text>, </xsl:text> 
06.
    </xsl:template> 
07.
 
08.
    <xsl:template match="wert1"> 
09.
        <xsl:text>'</xsl:text><xsl:value-of select="." /><xsl:text>', </xsl:text> 
10.
    </xsl:template> 
11.
     
12.
    <xsl:template match="wert2"> 
13.
        <xsl:text>'</xsl:text><xsl:value-of select="." /><xsl:text>', </xsl:text> 
14.
    </xsl:template> 
15.
     
16.
    <xsl:template match="wert3"> 
17.
        <xsl:text>'</xsl:text><xsl:value-of select="." /><xsl:text>', </xsl:text> 
18.
    </xsl:template> 
19.
    <!-- usw --> 
20.
 
21.
    <xsl:template match="betrag"> 
22.
        <xsl:value-of select="." /> 
23.
    </xsl:template> 
24.
     
25.
     
26.
    <!-- ROOT Template --> 
27.
     
28.
    <xsl:template match="satz"> 
29.
        <xsl:apply-templates select="nr" /> 
30.
         
31.
        <xsl:choose> 
32.
            <xsl:when test="wert1"> <xsl:apply-templates select="wert1" /> </xsl:when> 
33.
            <xsl:otherwise> <xsl:text>NULL, </xsl:text> </xsl:otherwise> 
34.
        </xsl:choose> 
35.
        <xsl:choose> 
36.
            <xsl:when test="wert2"> <xsl:apply-templates select="wert2" /> </xsl:when> 
37.
            <xsl:otherwise> <xsl:text>NULL, </xsl:text> </xsl:otherwise> 
38.
        </xsl:choose> 
39.
        <xsl:choose> 
40.
            <xsl:when test="wert3"> <xsl:apply-templates select="wert3" /> </xsl:when> 
41.
            <xsl:otherwise> <xsl:text>NULL, </xsl:text> </xsl:otherwise> 
42.
        </xsl:choose> 
43.
        <!-- usw --> 
44.
 
45.
        <xsl:apply-templates select="betrag" /> 
46.
        <xsl:text>&#xD;</xsl:text> 
47.
    </xsl:template> 
48.
 
49.
</xsl:stylesheet>
habe das mal schnell in PHP gebaut..
01.
// ... 
02.
$oXslt = new XSLTProcessor(); 
03.
$oXslt->registerPHPFunctions(); 
04.
$oXslt->importStyleSheet( DOMDocument::loadXML( $sXSL ) ); 
05.
echo $oXslt->transformToXML( DOMDocument::loadXML( $sXML ) );
...geht soweit - nur sollte man auch noch die Daten prüfen damit das auch ein valides CSV File wird.
Bitte warten ..
Mitglied: it-frosch
11.08.2009 um 10:04 Uhr
Hallo nxclass,

vielen Dank.
Hat super geklappt. Ich habe über XML einiges dazugelernt.
Bitte warten ..
Ähnliche Inhalte
XML
Transformation XML zu CSV mittels XSL
Frage von YannoschXML1 Kommentar

Hallo zusammen, vielleicht findet sich hier jemand der sich gut mit XSL-Transformationen auskennt. Ich muss aus einer XML eine ...

XML

XSL-Transformation-Problem (XRTreeFrag cannot be cast to)

Frage von Oli-87XML1 Kommentar

Hallo und einen schönen guten Abend, ich hänge hier gerade an einer Anforderung und komme absolut nicht weiter. Ich ...

XML

Xml: Werte mit xsl dividieren

gelöst Frage von tester23XML3 Kommentare

Hallo zuammen, nach langer Zeit hab ich wieder mal eine Frage. Ich hoffe jemand kann mit helfen? Ich habe ...

XML

Adresse in xml Datei durch xsl Datei trennen mit substring

gelöst Frage von usenussiXML2 Kommentare

Ich versuche hier verzweifelt eine Adresse in einer Muster.xml Datei nach dem Leerzeichen zu trennen. In der test.xsl Datei ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 5 StundenErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 7 StundenWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgborn vor 7 StundenMicrosoft7 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 2 TagenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1026 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall15 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)15 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Server
Route-Befehl Unterstützung (unter CMD)
Frage von FKRR56Server12 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...