IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: xml/rss a lepsi zobrazeni v prohlizeci (css?, xsl?)

Aktivity
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:22.1.2019 13:38

Mam XML soubor.
Potreboval bych, aby se zobrazoval v prohlizeci nejak lepe.
Zajimalo by mne, jak se to dnes resi?

Bracha nasel, ze by se dal pouzit css

<?xml-stylesheet type="text/css" href="./css/rss.css"?>

Ja zas nasel jakousi moznost vyuzit XSL. Ale moc tomu nerozumim (XSL zapisum a co se vlastne stane s xml, co dela to xsl template). Program zatim vypada takto. Ale treba to resim zbytecne komplikovane :) Tohle neco zobrazi. Nedela to jeste to, co bych chtel. Potreboval bych k tomu pridat css. A potrebuji jeste, aby se html-escapovany obsah prevedl zpet na html kod.

<link type="text/css" href="./css/rss.css">

<div id="container"></div>
 <script>

     function loadXMLDoc(filename) {
        if (window.ActiveXObject) {
             xhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } else {
             xhttp = new XMLHttpRequest();
        }
        xhttp.open("GET", filename, false);
        xhttp.send("");
        return xhttp.responseXML;
     }

    var xsl = new DOMParser().parseFromString([
'<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">',      // encoding="UTF-8"
'<!-- output xml and indent -->',
'<xsl:output method="xml" indent="yes"/>',
'<!-- copy all elements and their attributes -->',
'<xsl:template match="* | @*">',
'<xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>',
'</xsl:template>',
'</xsl:stylesheet>',
    ].join('\n'), 'application/xml');
//     xsl = loadXMLDoc("test.xsl");
//     xml = loadXMLDoc("test.xml");
     xml = loadXMLDoc("x-xml-news.xml");

     if (document.implementation && document.implementation.createDocument) {
        xsltProcessor = new XSLTProcessor();
        xsltProcessor.importStylesheet(xsl);
        resultDocument = xsltProcessor.transformToFragment(xml, document);
        document.getElementById('container').appendChild(resultDocument);
     }

 </script>

Asi cela dulezita cast celeho xsl je tato. Teprve zacnu googlovat a snazit se dopatrat, co ktere slovo dela, pripadne @ * a jine tam znaky.

'<xsl:template match="* | @*">',
'<xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>',
 
Odpovědět
22.1.2019 13:38
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:22.1.2019 14:04

V tom xml to vypada asi takhle, proste xml + html kod, + xml .

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="./css/rss.css"?>
<rss version="2.0">
<channel>
  <item>
    <title>text</title>
    <link> https://link?id=251</link>
    <description>&lt;p style="margin:0;"&gt;text text Prosím použijte tyto odkazy:&lt;br /&gt;
- &lt;a href="https://link.exe"&gt;produkt Česká verze 32-bit&lt;/a&gt;&lt;br /&gt;
- &lt;a href="https://link.exe"&gt;produkt Česká verze 64-bit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;text &lt;a href="https://link"&gt;https://link&lt;/a&gt; .&lt;/p&gt;
    </description>
  </item>
</channel>
</rss>
 
Nahoru Odpovědět
22.1.2019 14:04
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:22.1.2019 15:29

Oni samozrejme vsude pisou, ze mam pouzit disable-output-escaping, ale s tim to samozrejme nefunguje (aspon ve FF ten js kod).
Nakonec jsem pristoupil k tomu, ze to dekoduji pres js. Coz mozna ma i sve vyhody.

        desc  = el.querySelectorAll('description');
        i_end = desc.length;
        for (i=0; i<i_end; i++)
                {
                //alert(desc[i].innerHTML)
                desc[i].innerHTML = unEscapeHtml(desc[i].innerHTML);
                }

function unEscapeHtml(str) {
    var map = {
        "&amp;": "&",
        "&lt;": "<",
        "&gt;": ">",
        "&quot;": "\"",
        "&apos;": "'"
    };
    return str.replace(/(&amp;|&lt;|&gt;|&quot;|&#39;)/g, function(m) { return map[m]; });
}
Editováno 22.1.2019 15:30
 
Nahoru Odpovědět
22.1.2019 15:29
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.