Tips - XML

【TOP】

 XML(eXtensible Markup Language) は、B2Bでのデータ交換フォーマットとして、また、システムの設定ファイルとして、 あるいはウェブコンテンツとして等、様々な用途があります。今よくウェブサイトで見かけるRSSもXML文書です。
 XMLへのアクセスはDOM (Document Object Model)やSAX(Simple API for XML)等が有名です。
DOMはXML文書全体をメモリ上にツリー状に展開します。対してSAXはXML文書を読み込みながら、「要素を発見」といったイベントを発生させます。 DOMは一度XMLを読み込めばそれ以降の構文解析処理を行わないで済みますが、サイズの大きなXMLの場合、メモリ消費量が多くなります。 そしてSAXはXMLのサイズにあまり左右されず、高速な処理が可能ですが、常に構文解析処理を伴うという特徴があります。
従って、XML文書のサイズや構造、目的とする処理によって、これらを使い分ける必要があります。。
※ここでは、DOMを主にVBScriptを使ったWSHで紹介しますが、もちろんJScriptでも使えますしASP(Active Server Pages)にも
   応用が可能です。
※MSXML3以上の場合は「Msxml2.XMLDOM」の方が性能が良いらしいです。
簡単なXSLTを使ってXMLを変換してみよう!
ここではXSLT(XSL Transform)を用いて、XMLを整形、HTMLに変換してみます。
次のようなXML文書を例に挙げてみましょう。
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet href="list.xsl" type="text/xsl"?> <favorites> <musician> <name>George Winston</name> <genre>Piano Solo</genre> <country>USA</country> </musician> <musician> <name>Mr.BIG</name> <genre>Rock</genre> <country>USA</country> </musician> <musician> <name>L'Arc-en-Ciel</name> <genre>Rock</genre> <country>Japan</country> </musician> <musician> <name>NICKELBACK</name> <genre>Rock</genre> <country>Canada</country> </musician> <musician> <name>Dido</name> <genre>DarkPops</genre> <country>Canada</country> </musician> </favorites>
2行目の「<?xml-stylesheet・・・」はHTMLからCSSを参照するのと同様に、ここでは「style.xsl」というXSLTファイルを
用います、という処理命令(Processing Instruction) です。
少し話が逸れますが、XSLTを動的に指定する方法ももちろんあり、「XML文書をXSLT変換するには?
で触れた方法や、msxsl.exe というマイクロソフトのXSLTプロセッサ(Free)でCUI ベースで変換することも可能です。
この場合は上記XML文書の2行目の記述は必要なく、代わりに「<xsl:output>」要素で、出力形式等を指定します。

では本題に戻ります。変換に用いるXSLT文書を2つ用意しました。

<!-- table.xsl --> <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:strip-space elements="*"/> <xsl:template match="/"> <html> <head> <title>My Favorites!</title> </head> <body bgcolor="#FFE5E5"> <xsl:text>My Favorites!</xsl:text> <xsl:apply-templates select="favorites"/> </body> </html> </xsl:template> <xsl:template match="favorites"> <table border="1"> <tr> <th>ミュージシャン</th> <th>ジャンル</th> <th>出身国</th> </tr> <xsl:for-each select="musician"> <tr> <td><xsl:value-of select="name"/></td> <td><xsl:value-of select="genre"/></td> <td><xsl:value-of select="country"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet>
 
<!-- list.xsl --> <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:strip-space elements="*"/> <xsl:template match="/"> <html> <head> <title>My Favorites!</title> </head> <body bgcolor="#BDFFBA"> <xsl:text>My Favorites!</xsl:text> <xsl:apply-templates select="favorites"/> </body> </html> </xsl:template> <xsl:template match="favorites"> <xsl:for-each select="musician"> <xsl:sort select="name" data-type="text" order="descending"/> <ul> <li> <xsl:value-of select="name"/> <xsl:text>[</xsl:text> <xsl:value-of select="country"/> <xsl:text>]</xsl:text> </li> </ul> </xsl:for-each> </xsl:template> </xsl:stylesheet>
先程の XML文書中の「style.xsl」を「table.xsl」「list.xsl」に置き換えて、XML文書をIEで開いてみます。
すると次のように表示されます。list.xsl では <name> 要素の文字列値の降順でソートしています。(右図)
何故IEで変換後の文書を見ることが出来るのかというと、 IEがXSLTプロセッサの機能を備えているからです。

table.xslを適用した場合   list.xslを適用した場合

【戻る】