Kuroda Software Service
XMLとXSLの活用
  [サイトマップ]

コンテンツ内メニュー

表示モード 全項表示  部分表示



マークの色と認証の関係

一般公開

無料認証

購入認証


認証についての説明

無料アカウント作成フォーム

有料ページ購入フォーム


ほかのコンテンツトップページ

XMLとXSLの活用

JScriptプログラミングとXML

         XMLの活用

 

プログラムの存在意義は人間が楽をしたいという欲望に端を発します。紙と鉛筆で地道な演算を行うのが本質的に嫌いだからです。プログラミングの内部でも同じことが言えます。地道にソースコードで表現するよりもそれようにできている既存バイナリを利用した方が楽ですし高速です。

 

このセクションではXMLとXSLの活用例を示します。私は同様の解説を行うあまたのサイトを見てきましたが、どれも退屈なものばかりです。その理由は元になるサンプルXMLが退屈な内容だからです。このセクションでは貴方のコンピューターに存在する大量のデータをXML化することから始まります。

 

下記ソースコードをHTAとして実行してください。任意なフォルダのファイルを選んでボタンを押すと、ファイルが存在するフォルダ以下を再帰的に列挙し全ファイル情報がXML表示されます。

 

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">

<title>XML&amp;XSL</title>

</head>

<body>

<input type="file" ID="File1" NAME="File1" size="20">

<input type="button" value="Button" ID="Button1" NAME="Button1" onclick="main()">

<pre id="CON" style="padding:8px;color:white;background-color:black"></pre>

<script language="jscript">

    var FSO = new ActiveXObject("Scripting.FileSystemObject");

    var XML = new ActiveXObject("MSXML2.DOMDocument"); XML.loadXML("<Root/>");

 

    //Fileオブジェクトから取得するプロパティー名の配列

    var PROPERTY = new Array

    (

        "ID",

        "Attributes",

        "DateCreated",

        "DateLastAccessed",

        "DateLastModified",

        "Name",

        "Path",

        "ShortName",

        "ShortPath",

        "Size",

        "Type"

    );

 

 

    //表示関数

    function Put(str){CON.insertAdjacentText("beforeEnd", str);}

    function DispXml(){XML.loadXML(XML.xml.replace(/>/g, ">\n"));Put(XML.xml);}

 

 

    //8桁のカウント文字列を返す

    var COUNT = 0;

    function GetID()

    {

        var Temp = new String("0000000" + new String(COUNT++));

        return(Temp.substr(Temp.length - 8, 8));

    }

 

   

    //ファイルの再帰的な列挙

    function EnumFiles(Folder)

    {

        for(var Files = new Enumerator(Folder.Files); !Files.atEnd(); Files.moveNext())

        {

            var File = Files.item();          

            var Node = XML.firstChild.appendChild(XML.createElement("Node"));

            for(var c = 0; c < PROPERTY.length; c++)

            {

               //IDの場合はカウント文字列

               if(PROPERTY[c] == "ID") Node.setAttribute(PROPERTY[c], GetID());

               else Node.setAttribute(PROPERTY[c], File[PROPERTY[c]]);

            }

        }

        for(var Folders = new Enumerator(Folder.SubFolders); !Folders.atEnd(); Folders.moveNext()) arguments.callee(Folders.item());

    }

   

    function main()

    {

        //実在パスならその親フォルダを対象に列挙動作を行う

        if(FSO.FileExists(File1.value))

        {

            var Path = File1.value.replace(/\\[^\\]+$/,"");

            alert(Path + "にある全ファイルを列挙します。\nファイルが多いと数分かかる場合があります");

            EnumFiles(FSO.GetFolder(Path));

        }

        DispXml();

    }  

   

</script>

</body>

</html>

 

 

●ソースコード解説

 

これといって特別な処理を行っているわけでもないので解説は不要なのですが、XML文字列を表示する場合に自動整形を促すコードに注意してください。
   XML.loadXML(XML.xml.replace(/>/g, ">\n"));
は一見、終了タグに改行を追加しているだけに見えますが、実際は違います。この\nは\tでも同じ効果があり、XMLパーサーはXML文字列をきちんとインデントした表記に置き換えます。これは私が経験的に発見した裏技です。

 

お問い合わせ
©クロダ ソフトウェア サービス programmed by hidebou