■XMLメモ
XSLのテスト
shufflechara.xml
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="bust83.xsl" ?>
<charlist>
<char id="1">
<name>リシアンサス</name>
<nickname>シア</nickname>
<CV>あおきさやか</CV>
<birthday>7/30</birthday>
<height>160</height>
<bust>81</bust>
<waist>58</waist>
<hip>83</hip>
<hobby>人間界のニュースのスクラップ</hobby>
</char>
<char id="2">
<name>ネリネ</name>
<nickname>リン</nickname>
<CV>永見はるか</CV>
<birthday>10/13</birthday>
<height>154</height>
<bust>88</bust>
<waist>59</waist>
<hip>85</hip>
<hobby>手芸、裁縫、編み物</hobby>
</char>
<char id="3">
<name>芙蓉 楓</name>
<nickname></nickname>
<CV>後藤邑子</CV>
<birthday>11/10</birthday>
<height>162</height>
<bust>83</bust>
<waist>59</waist>
<hip>84</hip>
<hobby>家事全般</hobby>
</char>
<char id="4">
<name>時雨 亜沙</name>
<nickname></nickname>
<CV>伊藤美紀</CV>
<birthday>10/20</birthday>
<height>163</height>
<bust>87</bust>
<waist>60</waist>
<hip>85</hip>
<hobby>ケーキ作り</hobby>
</char>
<char id="5">
<name>プリムラ</name>
<nickname>リム</nickname>
<CV>ひと美</CV>
<birthday>1/25</birthday>
<height>151</height>
<bust>78</bust>
<waist>55</waist>
<hip>80</hip>
<hobby>まだない</hobby>
</char>
</charlist>
このファイルを処理するためのXSLは次のファイル。
bust83.xsl
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="/">
<html>
<head> <title>シャッフルキャラリスト</title> </head>
<body>
<xsl:apply-templates select="charlist"/>
</body>
</html>
</xsl:template>
<xsl:template match="charlist">
胸がおっきい人<BR/>
<table border="1">
<tr>
<td>名前</td>
<td>ニックネーム</td>
<td>CV</td>
<td>B</td>
</tr>
<xsl:apply-templates select="char"/>
</table>
</xsl:template>
<xsl:template match="char">
<xsl:if test="bust >= 83">
<tr>
<xsl:apply-templates select="name"/>
<xsl:apply-templates select="nickname"/>
<xsl:apply-templates select="CV"/>
<xsl:apply-templates select="bust"/>
</tr>
</xsl:if>
</xsl:template>
<xsl:template match="name">
<td>
<xsl:copy-of select="." />
</td>
</xsl:template>
<xsl:template match="nickname">
<td>
<xsl:copy-of select="." />
</td>
</xsl:template>
<xsl:template match="CV">
<td>
<xsl:copy-of select="." />
</td>
</xsl:template>
<xsl:template match="bust">
<td>
<xsl:copy-of select="." />
</td>
</xsl:template>
</xsl:stylesheet>
2つのファイルを同じフォルダに置いて、IE6で見るとデータが選択されて出力される。なお、ファイルのエンコーディングはUTF-8。
この方式は結構面倒。Perlを使う方法をそのうち考えよう。
XMLスキーマ
スキーマの勉強。上のXMLファイルのスキーマ。
shuffleschema.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="charlist">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="char" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="char">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string" />
<xsd:element name="nickname" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="CV" type="xsd:string" />
<xsd:element name="birthday" type="xsd:string" />
<xsd:element name="height" type="xsd:decimal" />
<xsd:element name="bust" type="xsd:decimal" />
<xsd:element name="waist" type="xsd:decimal" />
<xsd:element name="hip" type="xsd:decimal" />
<xsd:element name="hobby" type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:decimal" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
チェックするValidatorはいろいろある。PerlのXML::Validator::Schemaは動くが、エラーになっていても正確な行数を表示しない(?)。
ここのを使うと楽。
XML::DOM
使い方がマニュアルを読んでもわかりにくい。こんな
ページを発見。
子ノードを再帰的に探し、テキストをプリントする。
#!/usr/bin/perl -w
use strict;
use utf8;
use XML::DOM;
binmode(STDOUT,":utf8");
my $parser = new XML::DOM::Parser;
my $doc = $parser->parsefile("shufflechara.xml");
&walk( $doc );
sub walk {
my( $root ) = @_;
my @list = $root->getChildNodes;
foreach my $val (@list){
&walk( $val );
if( $val->getNodeTypeName eq "TEXT_NODE" ){
print $val->getNodeValue;
}
}
}
最終更新:2005年10月20日 16:39