Ankündigung

Einklappen
Keine Ankündigung bisher.

speichern in xml-Datei: Sonderzeichen behalten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • DigiHouse
    hat ein Thema erstellt speichern in xml-Datei: Sonderzeichen behalten.

    speichern in xml-Datei: Sonderzeichen behalten

    Hallo Leute,

    habe das Problem, dass ich eine XML mit Sonderzeichen (z.B. "&lt;") speichern will, aber diese Sonderzeichen stets konvertiert werden (z.B. "<"). Dies betrifft die Variable $MetaData.

    Mein Script:

    PHP-Code:
    <?

    /*//////////////////////////////////////////////////////////////////////////////
    Array der vordefinierten Radiosender aus UPNP_Radio_Presets.ips.php lesen und
    in die Datei IP-Symcon/webfront/user/Multimedia/Browse/Playlist/Radio.xml
    schreiben
    //////////////////////////////////////////////////////////////////////////////*/

    include ("UPNP_Constants.ips.php");
    include ("UPNP_Radio_Presets.ips.php");

    $Track = "";

    for($i=0,$size=count($Radio);$i<$size;$i++)
    {
    $Title = ($Radio["$i"]['title']);
    $AlbumArtURI = ($Radio["$i"]['albumArtURI']);
    $Resource = ($Radio["$i"]['resource']);

    $MetaData = '&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;&lt;item id="Radio'.$i.'"&gt;&lt;dc:title&gt;'.$Title.'&lt;/dc:title&gt;&lt;upnp:albumArtURI&gt;'.$AlbumArtURI.'&lt;/upnp:albumArtURI&gt;&lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt;'.$Resource.'&lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;';
    //$MetaData = '';

    $Track .= '
     <Track'.$i.'>
      <typ>item</typ>
      <metadata>'.$MetaData.'</metadata>
      <id>Radio'.$i.'</id>
      <refid>leer</refid>
      <parentid>leer</parentid>
      <restricted>leer</restricted>
      <artist>leer</artist>
      <album>leer</album>
      <title>'.$Title.'</title>
      <albumArtURI>'.$AlbumArtURI.'</albumArtURI>
      <genre>leer</genre>
      <date>leer</date>
      <originalTrackNumber>leer</originalTrackNumber>
      <class>object.item.audioItem.audioBroadcast</class>
      <resource>'.$Resource.'</resource>
      <duration>leer</duration>
      <size>leer</size>
      <bitrate>leer</bitrate>
     </Track'.$i.'>';
     
    }

    $xml = '<?xml version="1.0" encoding="UTF-8"?>
    <Playlist>'.$Track.'
    </Playlist>';

    echo($xml);

    //Radio-Presets in /webfront/user/Multimedia/Browse/Playlist/Radio.xml schreiben

    $handle = fopen($Kernel."webfront/user/Multimedia/Browse/Playlist/Radio.xml", "w+");
    fwrite($handle, $xml);
    fclose($handle);
            
    ?>
    Wie kann ich das verhindern ?

    Ein echo der $XML sieht so aus, wie sie soll:

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <Playlist>
     <Track0>
      <typ>item</typ>
      <metadata>&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;&lt;item id="Radio0"&gt;&lt;dc:title&gt;1LIVE diggi&lt;/dc:title&gt;&lt;upnp:albumArtURI&gt;http://d1i6vahw24eb07.cloudfront.net/s45087q.png&lt;/upnp:albumArtURI&gt;&lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt;http://www.wdr.de/wdrlive/media/einslivedigi.m3u&lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</metadata>
      <id>Radio0</id>
      <refid>leer</refid>
      <parentid>leer</parentid>
      <restricted>leer</restricted>
      <artist>leer</artist>
      <album>leer</album>
      <title>1LIVE diggi</title>
      <albumArtURI>http://d1i6vahw24eb07.cloudfront.net/s45087q.png</albumArtURI>
      <genre>leer</genre>
      <date>leer</date>
      <originalTrackNumber>leer</originalTrackNumber>
      <class>object.item.audioItem.audioBroadcast</class>
      <resource>http://www.wdr.de/wdrlive/media/einslivedigi.m3u</resource>
      <duration>leer</duration>
      <size>leer</size>
      <bitrate>leer</bitrate>
     </Track0>
    Offenbar geschieht dies erst beim speichern. Hier der Anfang der vom Browser angezeigten Datei (zu achten auf <metadata>):

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <Playlist>
    <Track0>
    <typ>item</typ>
    <metadata><DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"><item id="Radio0"><dc:title>1LIVE diggi</dc:title><upnp:albumArtURI>http://d1i6vahw24eb07.cloudfront.net/s45087q.png</upnp:albumArtURI><res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000">http://www.wdr.de/wdrlive/media/einslivedigi.m3u</res><upnp:class>object.item.audioItem.audioBroadcast</upnp:class></item></DIDL-Lite></metadata>
    <id>Radio0</id>
    <refid>leer</refid>
    <parentid>leer</parentid>
    <restricted>leer</restricted>
    <artist>leer</artist>
    <album>leer</album>
    <title>1LIVE diggi</title>
    <albumArtURI>http://d1i6vahw24eb07.cloudfront.net/s45087q.png</albumArtURI>
    <genre>leer</genre>
    <date>leer</date>
    <originalTrackNumber>leer</originalTrackNumber>
    <class>object.item.audioItem.audioBroadcast</class>
    <resource>http://www.wdr.de/wdrlive/media/einslivedigi.m3u</resource>
    <duration>leer</duration>
    <size>leer</size>
    <bitrate>leer</bitrate>
    </Track0>
    Wichtig ist, dass <MetaData> so bleibt wie es ist. Hoffe Ihr könnt mir einen Tipp geben.

    Gruß

    André

  • tr0y
    antwortet
    Das was du im browser siehst ist der Standard Content-Type Parser-output ( was by default text/html ist ). Schau in den Quellcode der dargestellten Seite oder sende einen header.

    PHP-Code:
    header('Content-Type: text/xml; charset=utf-8'); 
    Grundlegend rate ich zu Libraries die auto-quoting unterstützen und das benutzen von der realen Formatierung.

    PHP-Code:
    <?php

    $resource 
    'foobar:baz';

    $data = <<<PLAIN
    <DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/">
        <item id="Radioi">
            <dc:title>Title</dc:title>
            <upnp:albumArtURI>AlbumArtURI</upnp:albumArtURI>
            <res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000">
                
    {$resource} 
            </res>
            <upnp:class>object.item.audioItem.audioBroadcast</upnp:class>
        </item>
    </DIDL-Lite>
    PLAIN;

    $dom = new DOMDocument('1.0''utf-8');

    $metaData $dom->createElement('metdata'$data);

    header('Content-Type: text/xml');

    echo 
    $dom->saveHtml($metaData);
    Browser rendered:
    Code:
    <metdata> <!-- als tag -->
    <DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"> <item id="Radioi"> <dc:title>Title</dc:title> <upnp:albumArtURI>AlbumArtURI</upnp:albumArtURI> <res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"> foobar:baz </res> <upnp:class>object.item.audioItem.audioBroadcast</upnp:class> </item> </DIDL-Lite> <!-- als text -->
    </metdata>
    Das was der browser bekommt:
    Code:
    <metdata>&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;
        &lt;item id="Radioi"&gt;
            &lt;dc:title&gt;Title&lt;/dc:title&gt;
            &lt;upnp:albumArtURI&gt;AlbumArtURI&lt;/upnp:albumArtURI&gt;
            &lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt;
                foobar:baz 
            &lt;/res&gt;
            &lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;
        &lt;/item&gt;
    &lt;/DIDL-Lite&gt;</metdata>
    Wenn der Browser nicht rendern soll sende den Mime-Type text/plain.

    Einen Kommentar schreiben:


  • DigiHouse
    antwortet
    ... schon klar. Aber warum interpretiert der Browser (und damit auch einige DLNA-Geräte) bei gleicher Syntax einmal ohne Umwandlung und bei o.g. Script mit Umwandlung.
    Habe es jetzt auf die Alternative umgestellt und jetzt funktioniert es...

    Trotzdem Allen Danke für die Mühe...

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    wieso interpretiert der browser wohl htmlentities:
    http://www.w3schools.com/HTML/html_entities.asp

    dann gehts wohl mit<![CDATA[Inhalt]]> oder eben mit regex. also aus "&lt;" -> "&amp;lt;" machen; so amchen es jedenfalls die leute von w3cshool in der verlinkten seite.
    achja irgendwas damit ging noch http://php.net/manual/en/function.htmlentities.php, glaub ich.

    Einen Kommentar schreiben:


  • DigiHouse
    antwortet
    @moma

    Danke für den Einsatz

    Warum auch immer stimmt die Ausgabe zwar in einem Texteditor, aber bei einem Browser bekomme ich eine interpretierte Ausgabe. Ich hatte zur Playlisterstellung das ganze über ein Array, welches über Array2XML konvertiert wird so abspeichern können, das die Zeichenkette erhalten blieb.

    Das werde ich dann wohl als Workaround genauso machen, obwohl komplizierter.

    @ChristianK

    Mit <![CDATA[Inhalt]]> bleibt es zwar erhalten, aber ich müsste dann den zusätzlichen Ausdruck CDATA wieder cutten.

    Gruß Andr´´e

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    kommt bei mir so raus:

    PHP-Code:
    <?php

    /*//////////////////////////////////////////////////////////////////////////////
    Array der vordefinierten Radiosender aus UPNP_Radio_Presets.ips.php lesen und
    in die Datei IP-Symcon/webfront/user/Multimedia/Browse/Playlist/Radio.xml
    schreiben
    //////////////////////////////////////////////////////////////////////////////*/


    $MetaData '&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;&lt;item id="Radioi"&gt;&lt;dc:title&gt; Title &lt;/dc:title&gt;&lt;upnp:albumArtURI&gt; AlbumArtURI &lt;/upnp:albumArtURI&gt;&lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt; $Resource &lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;';
    //$MetaData = '';

    $Track '
     <Tracki>
      <typ>item</typ>
      <metadata disable-output-escaping="yes">'
    .$MetaData.'</metadata>
      <id>Radioi</id>
      <refid>leer</refid>
      <parentid>leer</parentid>
      <restricted>leer</restricted>
      <artist>leer</artist>
      <album>leer</album>
      <title>title</title>
      <albumArtURI>AlbumArtURI</albumArtURI>
      <genre>leer</genre>
      <date>leer</date>
      <originalTrackNumber>leer</originalTrackNumber>
      <class>object.item.audioItem.audioBroadcast</class>
      <resource>Resource</resource>
      <duration>leer</duration>
      <size>leer</size>
      <bitrate>leer</bitrate>
     </Tracki>'
    ;
     


    $xml '<?xml version="1.0" encoding="UTF-8"?>
    <Playlist>'
    .$Track.'
    </Playlist>'
    ;
    $xml = new SimpleXMLElement($xml);
    echo(
    $xml);

    //Radio-Presets in /webfront/user/Multimedia/Browse/Playlist/Radio.xml schreiben
    $xml->saveXML("Radio.xml");
    Code:
    # cat Radio.xml 
    
        
        
        
    
    
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <Playlist>
     <Tracki>
      <typ>item</typ>
      <metadata disable-output-escaping="yes">&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;&lt;item id="Radioi"&gt;&lt;dc:title&gt; Title &lt;/dc:title&gt;&lt;upnp:albumArtURI&gt; AlbumArtURI &lt;/upnp:albumArtURI&gt;&lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt; $Resource &lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</metadata>
      <id>Radioi</id>
      <refid>leer</refid>
      <parentid>leer</parentid>
      <restricted>leer</restricted>
      <artist>leer</artist>
      <album>leer</album>
      <title>title</title>
      <albumArtURI>AlbumArtURI</albumArtURI>
      <genre>leer</genre>
      <date>leer</date>
      <originalTrackNumber>leer</originalTrackNumber>
      <class>object.item.audioItem.audioBroadcast</class>
      <resource>Resource</resource>
      <duration>leer</duration>
      <size>leer</size>
      <bitrate>leer</bitrate>
     </Tracki>
    </Playlist>
    aber mir wäre ein gekürztes und portables beispiel lieber gewesen, zumal ich mich permannent vertippe.

    Einen Kommentar schreiben:


  • ChristianK
    antwortet
    Wie wäre es mit
    Code:
    <![CDATA[Inhalt]]>
    ?

    Einen Kommentar schreiben:


  • DigiHouse
    antwortet
    Danke. Brachte aber leider nix:

    PHP-Code:
    <?

    /*//////////////////////////////////////////////////////////////////////////////
    Array der vordefinierten Radiosender aus UPNP_Radio_Presets.ips.php lesen und
    in die Datei IP-Symcon/webfront/user/Multimedia/Browse/Playlist/Radio.xml
    schreiben
    //////////////////////////////////////////////////////////////////////////////*/

    include ("UPNP_Constants.ips.php");
    include ("UPNP_Radio_Presets.ips.php");

    $Track = "";

    for($i=0,$size=count($Radio);$i<$size;$i++)
    {
    $Title = ($Radio["$i"]['title']);
    $AlbumArtURI = ($Radio["$i"]['albumArtURI']);
    $Resource = ($Radio["$i"]['resource']);

    $MetaData = '&lt;DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/"&gt;&lt;item id="Radio'.$i.'"&gt;&lt;dc:title&gt;'.$Title.'&lt;/dc:title&gt;&lt;upnp:albumArtURI&gt;'.$AlbumArtURI.'&lt;/upnp:albumArtURI&gt;&lt;res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=03700000000000000000000000000000"&gt;'.$Resource.'&lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.audioBroadcast&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;';
    //$MetaData = '';

    $Track .= '
     <Track'.$i.'>
      <typ>item</typ>
      <metadata disable-output-escaping="yes">'.$MetaData.'</metadata>
      <id>Radio'.$i.'</id>
      <refid>leer</refid>
      <parentid>leer</parentid>
      <restricted>leer</restricted>
      <artist>leer</artist>
      <album>leer</album>
      <title>'.$Title.'</title>
      <albumArtURI>'.$AlbumArtURI.'</albumArtURI>
      <genre>leer</genre>
      <date>leer</date>
      <originalTrackNumber>leer</originalTrackNumber>
      <class>object.item.audioItem.audioBroadcast</class>
      <resource>'.$Resource.'</resource>
      <duration>leer</duration>
      <size>leer</size>
      <bitrate>leer</bitrate>
     </Track'.$i.'>';
     
    }

    $xml = '<?xml version="1.0" encoding="UTF-8"?>
    <Playlist>'.$Track.'
    </Playlist>';
    $xml = new SimpleXMLElement($xml);
    echo($xml);

    //Radio-Presets in /webfront/user/Multimedia/Browse/Playlist/Radio.xml schreiben
    $xml->saveXML($Kernel."webfront/user/Multimedia/Browse/Playlist/Radio.xml");

            
    ?>
    Gruß André

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    wieso speicherst du xml nicht mit http://php.net/manual/en/domdocument.savexml.php.
    da könnte man es ja mal mit
    Code:
    disable-output-escaping="yes"
    versuchen.

    Einen Kommentar schreiben:

Lädt...
X