作者: 藤岡和夫
日時: 2002/3/11(23:44)
On Mon, 11 Mar 2002 11:26:49 +0900
ねこ丸 <QYE07500@...> さんwrote:

>   別なとこで出た話題なのですが、こんなんあります。
> 
>   ブックマーク記述言語「XBEL」
>   http://www2.airnet.ne.jp/sardine/complang/XBEL.html

 大変おもしろいので、遊んでみました。私はArrangeNoteでブックマークを管
理しているので、ArrangeNoteにIEからドラッグ&ドロップで放り込んだURLを
XML-XBELで出力するJavaScriptを書きました。といっても付属している山本さん
のgenxml.jsを改造したものですが・・・

////////////////////////////////////////////////////////////
// ArrangeNote専用スクリプト
//     genxbel.js - ブックマークのメモをXML-XBELファイルに出力
//     genxml.js modified by Kazuo Fujioka
////////////////////////////////////////////////////////////

// お約束・ノートオブジェクトを取得する ////////////////////////////////////////
var note = ANScript.GetNote();

// いろんな関数の定義 //////////////////////////////////////////////////////////
function substitute( body, c, rep ) {
  var body2 = new String( '' );
  var i, j;
  for( i = 0; ( j = body.indexOf( c, i ) ) != -1; i = j + c.length ) {
    body2 += body.substring( i, j );
    body2 += rep;
  }
  body2 += body.substr( i );
  return body2;
}
function genXMLtag( name, value ) {
  var value2 = new String( value );
  value2 = substitute( value2, '&', '&amp;' );
  value2 = substitute( value2, '<', '&lt;' );
  value2 = substitute( value2, '>', '&gt;' );
  value2 = substitute( value2, "'", '&apos;' );
  value2 = substitute( value2, '"', '&quot;' );
  var tag = new String( '' );
  tag += '<' + name;
  if ( value2.length ) {
    tag += '>' + value2 + '</' + name + '>';
  } else {
    tag += ' />';
  }
  return tag;
}
function genXML( node ) {
  if ( node == null || node.Type == note.MEMO ) { return; }
  var i;
  for( i = 0; i < node.GetChildItemCount(); i++ ) {
    var item = node.GetChildItem( i );
    if ( item.Type == note.MEMO ) {
      if (item.UrlBody == true){
        var x = new String(item.Body);
        var y = new String;
        y = x.split("\n",2);
        xml += '    <bookmark href="' + y[0] + '" visited="' + item.ModifiedTime + '">\n';
      }
      if ( item.UrlRemarks == true ){
        xml += '    <bookmark href="' + item.Remarks + '" visited="' + item.ModifiedTime + '">\n';
      }
      xml += "      " + genXMLtag( 'title', item.Title ) + '\n';
      xml += "      " + genXMLtag( 'desc', item.Body ) + '\n';
      xml += '    </bookmark>\n';
    } else {
      xml += '  <folder>\n';
      xml += "    " + genXMLtag( 'title', item.Title ) + '\n';
      genXML( item );
      xml += '  </folder>\n';
    }
  }
}

// XMLファイルの出力先を選ぶ ///////////////////////////////////////////////////
var filename = ANScript.ChooseFile( "出力するXMLファイル名を指定してください。", true );
if ( filename == "" ) {
  ANScript.Quit();
}
if ( filename.lastIndexOf( '.xml' ) == -1 ) {
  filename += '.xml';
}
var file = ANScript.FileObject( filename );
if ( file.Exist() ) {
  var confirm = ANScript.Confirm( 
      "指定されたファイルは既に存在します。\n上書きしてもよろしいですか?", ANScript.YESNO );
  if ( confirm != ANScript.YES ) {
    ANScript.Quit();
  }
}

// XMLデータを作成する /////////////////////////////////////////////////////////
var xml = '<?xml version="1.0" encoding="Shift_JIS" ?>\n';
xml += '<?xml-stylesheet type="text/xsl" href="xbel-1.0.xsl"?>\n';
xml += '<!-- <?xml-stylesheet type="text/xsl" href="basic_xbel.xsl"?> -->\n';
xml += '<!DOCTYPE xbel PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML" "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">\n';
xml += '<xbel>\n';
xml += '  <title>Bookmarks of Kazuo Fujioka</title>\n';
xml += '  <info><metadata owner="Kazuo Fujioka"/></info>\n';
genXML( note.GetRootItem() );
xml += '</xbel>\n';

// XMLデータをファイルに出力する ///////////////////////////////////////////////
file.Write( xml );


 これで最近集めたxml関係のブックマークをXBELで出力して、xbel-1.0.xslと
一緒に「TS Networkのために」ホームページにアップロードしました。

http://homepage1.nifty.com/kazuf/bookmarks.xml

でその結果を見ることができます。大変便利ですね。IE6で見ましょう(^^;)その
うちHTMLに変換してアップします。

藤岡 和夫
FGALTS@...
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/