2004年06月23日

ブログタイトルを読み込む2

06月20日のやつ ( http://jsgt.org/mt/archives/01/000047.htm ) を試しにblogbodyへ直接書いてみます。 書き出すためのDIVをHTMLで用意しましたので、少しシンプルになってます。が、それだけだとつまらないので、カテゴリーと日時も取り出してみました。RSSリーダーですな。
*2004.06.23 Mozで<dc:subject>を取り出せないことが判明。(Thanx ふむふむさん) うーん。くやしい。なぜに?
*あ、わかったnamespaceの処理を間違えてた。。。てことで失敗版はコメントへ移動します。 で、<dc:subject>はDOM2(たとえばMoz)では名前空間用のgetElementsByTagNameNSでないと取り出せません。ただし、IEは逆にgetElementsByTagNameNSを使えないのでクロスブラウザ処理が必要になります。。。またかよ。
ブログタイトルを読み込みます

<script type="text/javascript">
<!--
/*========================================================== 
//クロスブラウザ load関数

  引数  : url    XMLファイルのurl
          func   読み込み成功時の起動関数名
  戻値  : 読み込まれたXMLノードツリー
  例    : loadFile( 'data.xml', func1 )
         function func1(){alert('test')}
  Support http://game.gr.jp/js/
*/

function loadFile(url,func)
{
  if(document.getElementById){
    if (window.ActiveXObject)
    {
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
          xmlDoc.async = false
          if(xmlDoc.load(url)){func(xmlDoc)}
    } else if ( document.implementation && 
                document.implementation.createDocument )
    {
      var xmlDoc = document.implementation.createDocument("","",null)
          xmlDoc.onload = function (){func(xmlDoc)}
          xmlDoc.load(url)
    }
    return xmlDoc
  }
}
/*==========================================================*/


//読み込んだXMLのデータをもとにHTMLへ書き出す
function writeXMLData(xdoc)
{

  var listLen = 10 //表示件数 wktitle.length
  var ns_dc   = "http://purl.org/dc/elements/1.1/"

  //XML内の取り出したいタグの配列を作る
  var wktitle = xdoc.getElementsByTagName("title")
  var wkmodified = xdoc.getElementsByTagName("modified")
  //名前空間用とりあえずクロスな処理
  if(document.all) var wksubject = xdoc.getElementsByTagName("dc:subject")
  else var wksubject = xdoc.getElementsByTagNameNS( ns_dc ,"subject")

  //書き出すためのdiv
  wkdiv = document.getElementById("writeXMLDataDiv")
  wkdiv.innerHTML=""

  //"title"タグが出てきた順に処理する
  for( i = 1 ; i < listLen + 1 ; i++ )
  { 
    if ( wktitle.length <= i ) break;
    //urlを取り出す
    var wklink     = xdoc.getElementsByTagName("link")[i]
    var wklinkHref = wklink.attributes.getNamedItem("href").nodeValue


    //各タグ内のfirstChildのデータだけをinnerHTMLで書き出す
    wkdiv.innerHTML += '<font size=-1>'
                    +  '<a href="'+ wklinkHref +'">'
                    +  '<b>[' + wksubject[(i-1)].firstChild.nodeValue +'] </b>'
                    +   wktitle[i].firstChild.nodeValue 
                    +  '</a> '
                    +  wkmodified[i].firstChild.nodeValue 
                    +  '</font><br>'
  }
  wkdiv.innerHTML += '<hr>'
}

//-->
</script>
<div id="writeXMLDataDiv">ブログタイトルを読み込みます</div>

<input type   = "button" 
       value  = "ブログタイトル読み込み 最新の10件"
       onclick= "loadFile('./atom.xml',writeXMLData)">
<input type   = "button" 
       value  = "クリア"
       onclick= "if(window.wkdiv)wkdiv.innerHTML=''">
投稿者 tato : 2004年06月23日 00:09 | トラックバック
コメント

■2004.06.23 最初につくった没バージョン
----------------------------------------
<dc:subject>が名前空間用のgetElementsByTagNameNSでないと取り出せないことに気づかず、IEは動いていたけど、Mozで動いていませんでした。

<script type="text/javascript">
<!--
/*========================================================== 
//クロスブラウザ load関数

  引数  : url    XMLファイルのurl
          func   読み込み成功時の起動関数名
  戻値  : 読み込まれたXMLノードツリー
  例    : loadFile( 'data.xml', func1 )
         function func1(){alert('test')}
  Support http://game.gr.jp/js/
*/

function loadFile(url,func)
{
  if(document.getElementById){
    if (window.ActiveXObject)
    {
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
          xmlDoc.async = false
          if(xmlDoc.load(url)){func(xmlDoc)}
    } else if ( document.implementation && 
                document.implementation.createDocument )
    {
      var xmlDoc = document.implementation.createDocument("","",null)
          xmlDoc.onload = function (){func(xmlDoc)}
          xmlDoc.load(url)
    }
    return xmlDoc
  }
}
/*==========================================================*/


//読み込んだXMLのデータをもとにHTMLへ書き出す
function writeXMLData(xdoc)
{

  var listLen = 10 //表示件数 wktitle.length

  //XML内の取り出したいタグの配列を作る
  var wktitle = xdoc.getElementsByTagName("title")
  var wkmodified = xdoc.getElementsByTagName("modified")
  var wksubject = xdoc.getElementsByTagName("dc:subject")


  //書き出すためのdiv
  wkdiv = document.getElementById("writeXMLDataDiv")
  wkdiv.innerHTML=""

  //"title"タグが出てきた順に処理する
  for( i = 1 ; i < listLen + 1 ; i++ )
  { 
    if ( wktitle.length <= i ) break;
    //urlを取り出す
    var wklink     = xdoc.getElementsByTagName("link")[i]
    var wklinkHref = wklink.attributes.getNamedItem("href").nodeValue

    //各タグ内のfirstChildのデータだけをinnerHTMLで書き出す
    wkdiv.innerHTML += '<font size=-1>'
                    +  '<a href="'+ wklinkHref +'">'
                    +  '<b>[' + wksubject[(i-1)].firstChild.nodeValue +'] </b>'
                    +   wktitle[i].firstChild.nodeValue 
                    +  '</a> '
                    +  wkmodified[i].firstChild.nodeValue 
                    +  '</font><br>'
  }
  wkdiv.innerHTML += '<hr>'
}

//-->
</script>
<div id="writeXMLDataDiv">ブログタイトルを読み込みます</div>

<input type   = "button" 
       value  = "ブログタイトル読み込み 最新の10件"
       onclick= "loadFile('">http://jsgt.org/mt/01/atom.xml',writeXMLData)">
<input type   = "button" 
       value  = "クリア"
       onclick= "if(window.wkdiv)wkdiv.innerHTML=''">

Posted by: 高橋登史朗 : 2004年06月23日 22:08
コメントする









名前、アドレスを登録しますか?