XSLT版
line


XMLフォーマットで作られたRSS(Rich Site Summary)をWebブラウザのXMLパーサーを使って解析してみます。

XML解析は、サーバーサイドでの解析ではなく、クライアント側のWebブラウザ上で行います。
手軽に試せる半面、セキュリティの関係でローカルマシン上でしか実行できません。

# インターネット上にアップロードしてもセキュリティ・レベルを下げないと実行できません。
# なので、ローカルで実行する勉強用と考えてください。

ブラウザはMicrosoft Internet Exproler 5.5以降を使用します(MSXMLを利用)。
<2007/02/19> Firefox、Operaにも対応しました。


  XSLTソースコード (rss.xsl)
line

RSS 1.0形式のXMLタグを解析しHTMLに変換するXSLTサンプルソース。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
                xmlns:dc="http://purl.org/dc/elements/1.1/"
                xmlns:purl="http://purl.org/rss/1.0/"
                version="1.0">
<xsl:template match="/">
  <html><head><title>RSS/RDF</title></head><body>
    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#ddddee">
      <tr>
        <th colspan="3" bgcolor="#ddddee">
          <xsl:value-of select="/rdf:RDF/purl:channel/purl:title" />
        </th>
      </tr>
      <xsl:apply-templates select="/rdf:RDF/purl:item" />
    </table>
  </body></html>
</xsl:template>

<xsl:template match="purl:item">
  <xsl:variable name="itemUrl" select="purl:link" />
  <tr>
    <td>
      <xsl:value-of select="concat(substring(dc:date,0,11),' ',substring(dc:date,12,5))"/>
    </td>
    <td><xsl:value-of select="dc:subject"/></td>
    <td>
      <xsl:element name="a">
        <xsl:attribute name="href"><xsl:value-of select="$itemUrl" /></xsl:attribute>
        <xsl:attribute name="target">_blank</xsl:attribute>
        <xsl:value-of select="purl:title"/>
      </xsl:element>
    </td>
  </tr>
</xsl:template>

</xsl:stylesheet>

  HTMLソースコード
line

こちらはHTML。
<html>
<head>
<script language="JavaScript"><!--
function viewList(xmlFile,xslFile) {
    if (window.ActiveXObject) {
        // IE
        var xmlDoc  = new ActiveXObject("Microsoft.XMLDOM");
        var xsltDoc = new ActiveXObject("Microsoft.XMLDOM");

        xmlDoc.async = false;
        xsltDoc.async = false;
        xmlDoc.load(xmlFile);
        xsltDoc.load(xslFile);

        document.getElementById("viewArea").innerHTML = xmlDoc.transformNode(xsltDoc);
    }else if (document.implementation && document.implementation.createDocument) {
        // FireFox
        var xmlDoc  = document.implementation.createDocument("", "", null);
        var xsltDoc = document.implementation.createDocument("", "", null);

        xmlDoc.async = false;
        xsltDoc.async = false;
        xmlDoc.load(xmlFile);
        xsltDoc.load(xslFile);

        var xsltPro = new XSLTProcessor();
        xsltPro.importStylesheet(xsltDoc);
        document.getElementById("viewArea").innerHTML = "";
        document.getElementById("viewArea").appendChild(xsltPro.transformToFragment(xmlDoc, document));
    }else{
        alert("このブラウザでは実行できません")
    }
}
--></script>
</head>
<body onload="viewList('index.xml','rss.xsl')">

<div id="viewArea" align="center"></div>
</body>
</html>


  実行結果
line

  ダウンロード
line
上記サンプルのソースコード … Download (59KB)