Java týden Body zdarma
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

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

Aktivity (7)
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:22. ledna 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. ledna 13:38
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:22. ledna 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. ledna 14:04
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:22. ledna 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. ledna 15:30
 
Nahoru Odpovědět 22. ledna 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.