Ungewünschte Zeilenumbrüche
Steven
- xsl
Hi,
ich habe immernoch das Problem, dass bei der Umwandlung meiner XML Datei zu einer CSV Datei ungewünschte Zeilenumbrüche auftreten.
Die Zeilenumbrüche treten immer dann auf, wenn auch die XML Datei an dieser Stelle einen Zeilenumbruch enthält.
Hier ein exemplarischer Ausschnitt aus meiner XSL Datei:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="no" media-type="text/plain" />
<xsl:template match="Data">
<xsl:value-of select="@att1"/>xsl:text;</xsl:text>
xsl:apply-templates/
</xsl:template>
<xsl:template match="Sub">
<xsl:value-of select="@att2"/>xsl:text;</xsl:text>
xsl:apply-templates/
</xsl:template>
<xsl:template match="SubSub">
<xsl:value-of select="att1"/>xsl:text;</xsl:text>
</xsl:template>
...
Was mache ich falsch???
Danke für Eure Hilfe!
Ciao,
Steven
Hallo Steven,
wie sieht Deine XML-Datei aus (mit den Zeilenumbrüchen) und wie das nicht gewünschte Ergebnis?
Gruß
Franz
Hallo,
wie sieht Deine XML-Datei aus (mit den Zeilenumbrüchen) und wie das nicht gewünschte Ergebnis?
hier die XML Datei:
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<bulkCmConfigDataFile>
<fileHeader fileFormatVersion="fFV" senderName="optionalerSenderName" vendorName="optionalerHerstellerName"/>
<configData dnPrefix="optinalesDnPrefix">
<SubNetwork id="requiredID" modifier="optional: create/delete/update">
<attributes>
<userLabel>UserLabel 1</userLabel>
<userDefiniedNetworkType>userdefiniednetworktype 1</userDefiniedNetworkType>
</attributes>
<ManagementNode id="ManNodeID">
<attributes>
<userLabel>Label of ManNodeID</userLabel>
<vendorName>Nokia</vendorName>
<userDefinedState>code red</userDefinedState>
<locationName>Stuttgard</locationName>
<manages>12xt 007</manages>
<swVersion>1.2.1</swVersion>
</attributes>
<IRPAgent id="IRP-ID">
<attributes>
<systemDN>Hier steht die systemDN</systemDN>
</attributes>
<AlarmIRP id="alarmID">
<attributes>
<irpVersion>IRPVersion bei AlarmIRP</irpVersion>
</attributes>
</AlarmIRP>
</IRPAgent>
</ManagementNode>
</SubNetwork>
</configData>
<fileFooter dateTime="benoetigteDatumsangabe"/>
</bulkCmConfigDataFile>
hier die ausgegebene Datei:
fFV;optionalerSenderName;optionalerHerstellerName;
optinalesDnPrefix;
requiredID;optional: create/delete/update;
UserLabel 1;userdefiniednetworktype 1;
ManNodeID;
Label of ManNodeID;Nokia;code red;Stuttgard;12xt 007;1.2.1;
IRP-ID;
Hier steht die systemDN;
alarmID;
IRPVersion bei AlarmIRP;
benoetigteDatumsangabe
die XMLDatei ist nach dem 3GPP Schema 32.615 aufgebaut und mit Testdaten gefüllt.
Wer super wenn Du mir helfen könntest.
Die angegebene XSL Datei war wiegesagt nur exemplarisch.
Ciao,
Steven
Hallo Steven,
Wer super wenn Du mir helfen könntest.
Hm, so auf die Schnelle fällt mir nur das ein:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="no" media-type="text/plain" />
<xsl:strip-space elements="*"/>
<xsl:template match="//fileHeader">
<xsl:value-of select="@fileFormatVersion"/>xsl:text;</xsl:text>
<xsl:value-of select="@senderName"/>xsl:text;</xsl:text>
</xsl:template>
<!-- Weitere Templates für die anderen Elemente mit Attributen -->
<xsl:template match="text()">
<xsl:value-of select="."/>xsl:text;</xsl:text>
</xsl:template>
</xsl:stylesheet>
So funktioniert's unter Saxon mit deiner Datei. Mir fällt gerade keine generische Lösung für die Ausgabe aller Attributwerte eines Dokuments ein. Das wäre natürlich besonders elegant.
Gruß
Franz
PS: Thomas hatte dir doch ein Stylesheet zum Filtern der Whitespace-Knoten gepostet. Das müsste doch ebenso funktionieren ?
Hallo Steven, hallo Franz,
Mir fällt gerade keine generische Lösung für die Ausgabe aller Attributwerte eines Dokuments ein. Das wäre natürlich besonders elegant.
Mir schon, aber dummer weise geht das nur so:
<xsl:template name="attribute">
<xsl:for-each select="//*/@*">
<xsl:value-of select="normalize-space(concat(., ';'))" />
</xsl:for-each>
</xsl:template>
Der Nachteil wird sofort merkbar, wenn man versucht den Template aufzurufen (<xsl:template match="//*/@*">) funktioniert nicht)
PS: Thomas hatte dir doch ein Stylesheet zum Filtern der Whitespace-Knoten gepostet. Das müsste doch ebenso funktionieren ?
Ja, aber das Arge ist, dass es beim <xsl:output method="text"> die Attributwerte nicht miteinbezieht.
Grüße
Thomas
Hallo Thomas,
Mir schon, aber dummer weise geht das nur so:
<xsl:template name="attribute">
<xsl:for-each select="//*/@*">
<xsl:value-of select="normalize-space(concat(., ';'))" />
</xsl:for-each>
</xsl:template>Der Nachteil wird sofort merkbar, wenn man versucht den Template aufzurufen (<xsl:template match="//*/@*">) funktioniert nicht)
Ja, da bin ich auch gescheitert, man muss über die Elemente gehen und dann alle Attribute jedes Elements wählen.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="no" media-type="text/plain" />
<xsl:strip-space elements="*"/>
<xsl:template match="/">
xsl:apply-templates/
</xsl:template>
<xsl:template match="*">
<xsl:for-each select="@*">
<xsl:value-of select='.'/>
</xsl:for-each>xsl:text;</xsl:text>
xsl:apply-templates/
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="."/>xsl:text;</xsl:text>
</xsl:template>
</xsl:stylesheet>
Nun müsste man lediglich noch die Fälle abfangen, in denen ein Element keine Attribute hat, damit nicht ein Semikolon ausgegeben wird und auch das letzte Semikolon noch unterdrücken. Aber jetzt bis du wieder dran ;-)
Gruß
Franz
Hi Thomas,
hi Franz,
erstmal vielen Dank für Eure Lösungen! Sie haben mir schon einiges geholfen!
Wenn ich allerdings die einzelnen Werte noch bearbeiten oder die Reihenfolge festlegen muss, wirds nix.
Vielleicht probier ich es mal mit Java/JDOM obwohl das bei der möglichen, hohen Komplexität der XML Datei auch nicht gerade einfach werden dürfte :(
Ich melde mich dann wieder im Forum ;)
Viele Grüße und besten Dank,
Steven
Hi!
Wenn ich allerdings die einzelnen Werte noch bearbeiten oder die Reihenfolge festlegen muss, wirds nix.
Vergesst das! Geht natürlich.
Ciao,
Steven