[gelöst; solved] Wie Wert in channelids von xmltv Datei für xmltv2vdr ändern? (bash und xsltproc)

  • Hallo,


    Um eine xmltv Datei mit xmltv2vdr importieren zu können, sollten vorher die channelids konform zu xmltv2vdr gemacht werden.


    Zur Zeit mache ich es folgendermaßen in einem Bashskript:

    Code
    ...
    sed 's/altechannelid1/neuechannelid1/g'  	/var/lib/epgsources/xmltvdatei.temp01 > /var/lib/epgsources/xmltvdatei.temp02
    sed 's/altechannelid2/neuechannelid2/g'  	/var/lib/epgsources/xmltvdatei.temp02 > /var/lib/epgsources/xmltvdatei.temp03
    ...


    Gibt es vielleicht eine bessere Methode die Channelids per Bashskript zu ändern, die einer xml Datei besser angepasst ist und vielleicht auch nicht eine große Anzahl temporärer Dateien benötigt?


    MfG


    Ludi

  • Ich hatts mal so gemacht (Hänge ich mal einfach so an, evtl. kannst du da was rausziehen). Die Aufgabenstellung war hier den Grabber namens tvm2xmltv durch ein Shellscript zu ersetzen welches per xsltproc das (vom Grabber erzeugte) xml modifiziert. Das nickcomedy.de.xsl (die Steuerdatei für xsltproc) löscht hier Sendungen mit dem Titel "Sendeschluss" vom Kanal "nickcomedy.de".


    Du kannst sie (nickcomedy.de.xsl) natürlich auch für deinen Wunsch anpassen. Wobei ich mich mit dem Kram überhaupt nicht auskenne, diese Datei hatte ich von einem Experten hier im Forum erfragt. Aber diese Methode ist halt DIE Methode mit der man XMLs vorschriftsmäßig modifiziert ;)


    Gibt es vielleicht eine bessere Methode die Channelids per Bashskript zu ändern, die einer xml Datei besser angepasst ist und vielleicht auch nicht eine große Anzahl temporärer Dateien benötigt?


    xsltproc wenn du hier im Forum jemand findest der dir den Tipp gibt wie du die xsltproc Steuerdatei schreiben musst. Ist nicht schwer für Leute die das kapiert haben.


    cu

  • Dank der Dateien von Keine_Ahnung und und Google habe ich es hinbekommen.


    xsltproc verändert die xmltv (oder genereller xml) Dateien anhand von Regeln, die sich in der Stylesheet Datei befinden.


    In der Stylesheet die sich im Archiv von Keine-Ahnung befindet, ist eine Regel um ein Tag zu löschen (alle Attribute und Untertags werden mitgelöscht, wenn ich es richtig verstanden habe).


    Nach der Löschregel kommt eine Kopierregel um alle übrig gebliebenen Tags in die neue Struktur zu übernehmen.


    Die Regeln um die Sendernamen zu ändern kommen zwischen die Kopierregel und den Schlusstag des Stylesheets.


    In meiner xmltv Datei kommen die Sendernamen als Attribut in zwei verschiedene Tags vor:


    1) Der erste Tag ist von der folgenden Form und hier ist die Regel für das Stylesheet um den Namen zu ändern:


    Form:

    Code
    ...
    <channel id="alterName">
    	<display-name>Sendername</display-name>
    </channel>
    ...


    Regel:

    Code
    <xsl:template match="@id[.='alterName' and parent::channel]">
    	<xsl:attribute name="id">
        	<xsl:value-of select="'neuerName'"/>
    	</xsl:attribute>
    </xsl:template>


    Wir erhalten:

    Code
    ...
    <channel id="neuerName">
    	<display-name>Sendername</display-name>
    </channel>
    ...


    2) Der zweite Tag ist von der folgenden Form und hier ist die Regel für das Stylesheet um den Namen zu ändern:


    Form:

    Code
    ...
    <programme start="20120915233000 +0200" stop="20120916003500 +0200" channel="alterName">
        	<title>Norah Jones</title>
           	...
    		<video><aspect>16:9</aspect></video>
    </programme>
    ...


    Regel:

    Code
    <xsl:template match="@channel[.='alterName' and parent::programme]">
    	<xsl:attribute name="channel">
      	<xsl:value-of select="'neuerName'"/>
    	</xsl:attribute>
    </xsl:template>


    Wir erhalten:

    Code
    ...
    <programme start="20120915233000 +0200" stop="20120916003500 +0200" channel="neuerName">
        	<title>Norah Jones</title>
           	...
    		<video><aspect>16:9</aspect></video>
    </programme>
    ...


    Natürlich müssen zwei solche Einträge für jeden Sender, dessen Namen geändert werden muss, in die Stylesheet kommen.


    Mein Aufruf von xsltproc im bashskript sieht anders aus als im Skript von Keine-Ahnung; aber hier geht es ja um die Änderung der Sendernamen, und nicht um das Erstellen des Skriptes.


    Ich hoffe ich kann einigen Leuten mit diesen Erläuterungen weiterhelfen; bitte ziehen Sie jedoch in Betracht, dass ich mich eigentlich mit xslt nicht richtig auskenne und im Grunde nicht weiß, ob diese Lösung wirklich in Ordnung ist. Hier scheint sie zu funktionieren.



    Natürlich sollte für "neuerName" die Namen aus der verbindlichen Kanalliste benutzt werden, sofern schon Namen für die entsprechenden Sender definiert wurden.


    MfG

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!