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

Frage Entwicklung HTML

Mitglied: it-frosch

it-frosch (Level 2) - Jetzt verbinden

06.08.2009, aktualisiert 19:47 Uhr, 3562 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
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 8 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 12 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware8 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...