2007/5/10 1 comments

個人成績のページを直したいと思って、いろんなサイトを見ました。
プロ野球から社会人野球そして、草野球まで・・
その中から、一番自分のめざしているものに近かったのは阪神タイガースの打撃成績
そっからは、どうやってあんな感じにするのか考えました。
まさかいちいち、すべてのページを更新しているわけじゃないし。
セミオート化にするには・・
PHP+MYSQLで?
でも、最初から勉強するのもなんだし、面倒くさそうだし
自分のやりたい、昇降順ができるかわからないし。
Excelから変換するのもあったけど・・
そうこうしているうちに、XML・XSLTなら簡単だし、似たようにできるかもしれないことがわかった。
しかも、図書館で見てたたのしいXMLに昇降順のタグがあるし

は・と・やに決めた♪(懐メロ)
ソースは次から

ave.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" />—-①
<xsl:decimal-format name="0" NaN=" " />—-②
<xsl:template match="/">
<table>
<tr>
<td>選手名</td>
<td>試合</td>
<td>打席数</td>
<td>打数</td>
<td>得点</td>
<td>安打</td>
<td>二塁打</td>
<td>三塁打</td>
<td>本塁打</td>
<td>塁打</td>
<td>打点</td>
<td>盗塁</td>
<td>犠打</td>
<td>四死</td>
<td>三振</td>
<td>打率</td>
<td>長打率</td>
<td>出塁率</td>
<td>打席</td>
<td>打数</td>
<td>安打</td>
<td>打率</td>
</tr>
<xsl:for-each select="batter/bat">
<xsl:sort select="ヒット div 打数" order="descending"
/>—-③
<xsl:if test="打席&gt;../イニング * 2.7 div 9">—-④
<tr>
<td><xsl:value-of select="名前" /></td>
<td><xsl:value-of select="format-number(試合,’#')" /></td>
<td><xsl:value-of select="format-number(打席,’#')" /></td>
<td><xsl:value-of select="format-number(打数,’#')" /></td>
<td><xsl:value-of select="format-number(得点,’#')" /></td>
<td><xsl:value-of select="format-number(ヒット,’#')" /></td>
<td><xsl:value-of select="format-number(二塁打,’#')" /></td>
<td><xsl:value-of select="format-number(三塁打,’#')" /></td>
<td><xsl:value-of select="format-number(ホームラン,’#')" /></td>
<td><xsl:value-of select="format-number(ヒット + 二塁打 + 三塁打 *
2 + ホームラン * 3 , ‘#’)" /></td>—-⑤
<td><xsl:value-of select="format-number(打点,’#')" /></td>
<td><xsl:value-of select="format-number(盗塁,’#')" /></td>
<td><xsl:value-of select="format-number(犠打,’#')" /></td>
<td><xsl:value-of select="format-number(四球,’#')" /></td>
<td><xsl:value-of select="format-number(三振,’#')" /></td>
<td><xsl:value-of select="format-number(ヒット div 打数,’0.000′,0)" /></td>
<td><xsl:value-of select="format-number((ヒット + 二塁打 + 三塁打
* 2 + ホームラン * 3) div 打数,’0.000′,0)" /></td>—-⑥
<td><xsl:value-of select="format-number((四球 + ヒット) div 打席,’0.000′,0)"
/></td>—-⑦
<td><xsl:value-of select="format-number(得点圏打席,’#')" /></td>
<td><xsl:value-of select="format-number(得点圏打数,’#')" /></td>
<td><xsl:value-of select="format-number(得点圏ヒット,’#')" /></td>
<td><xsl:value-of select="format-number(得点圏ヒット div 得点圏打数,’0.000′,0)" /></td>
</tr>
</xsl:if>
</xsl:for-each>
<tr>
<td colspan="18" align="center">ここまでが規定打席<xsl:value-of
select="batter/イニング * 2.7 div 9" /> (回数÷9×2.7)プロ2軍参考</td>—–⑧
<td colspan="4" align="center">得点圏</td>
</tr>
<xsl:for-each select="batter/bat">
<xsl:sort select="ヒット div 打数" order="descending" />
<xsl:if test="打席&lt;../イニング * 2.7 div 9"><tr>——–⑨
<td><xsl:value-of select="名前" /></td>
<td><xsl:value-of select="format-number(試合,’#')" /></td>
<td><xsl:value-of select="format-number(打席,’#')" /></td>
<td><xsl:value-of select="format-number(打数,’#')" /></td>
<td><xsl:value-of select="format-number(得点,’#')" /></td>
<td><xsl:value-of select="format-number(ヒット,’#')" /></td>
<td><xsl:value-of select="format-number(二塁打,’#')" /></td>
<td><xsl:value-of select="format-number(三塁打,’#')" /></td>
<td><xsl:value-of select="format-number(ホームラン,’#')" /></td>
<td><xsl:value-of select="format-number(ヒット + 二塁打 * 2 + 三塁打 * 3 + ホームラン * 4,’#')" /></td>
<td><xsl:value-of select="format-number(打点,’#')" /></td>
<td><xsl:value-of select="format-number(盗塁,’#')" /></td>
<td><xsl:value-of select="format-number(犠打,’#')" /></td>
<td><xsl:value-of select="format-number(四球,’#')" /></td>
<td><xsl:value-of select="format-number(三振,’#')" /></td>
<td><xsl:value-of select="format-number(ヒット div 打数,’0.000′,0)" /></td>
<td><xsl:value-of select="format-number((ヒット + 二塁打 * 2 + 三塁打 * 3 + ホームラン * 4) div 打数,’0.000′,0)" /></td>
<td><xsl:value-of select="format-number((四球 + ヒット) div 打席,’0.000′,0)" /></td>
<td><xsl:value-of select="format-number(得点圏打席,’#')" /></td>
<td><xsl:value-of select="format-number(得点圏打数,’#')" /></td>
<td><xsl:value-of select="format-number(得点圏ヒット,’#')" /></td>
<td><xsl:value-of select="format-number(得点圏ヒット div 得点圏打数,’0.000′,0)" /></td></tr>
</xsl:if>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

①はXML宣言を省略するかどうか。自分はshift_jisでサイトを作ってるので、XML宣言を省略しないとUTF-8で挿入されるため、yesにしてます。なくても問題ないけど
②はNaNと表示するさいに、書かないでくれと命令しています。NaNや0のときは空白にしたいのが好きなので。消しても問題ないです
③は打率のとこを基準に降順にしています。
④は規定打席に達したものだけが並ぶようにしています
⑤は塁打
⑥は長打率
⑦は出塁率
⑧は規定打席に達した人と未満をわけるためにやってます
⑨は規定未満のものだけが並ぶようにしています

bat07.xml

<?xml version="1.0" encoding="shift_jis" ?>
<?xml-styleseet type="text/xml" href="ave.xsl" ?>
<batter>
<イニング>53</イニング>
<bat>
<名前>健史</名前>
<試合>6</試合>
<打席>15</打席>
<打数>12</打数>
<得点>2</得点>
<ヒット>2</ヒット>
<二塁打>1</二塁打>
<三塁打>0</三塁打>
<ホームラン>0</ホームラン>
<打点>2</打点>
<盗塁>2</盗塁>
<犠打>0</犠打>
<四球>3</四球>
<三振>8</三振>
<得点圏打席>7</得点圏打席>
<得点圏打数>5</得点圏打数>
<得点圏ヒット>1</得点圏ヒット>
</bat>
<bat>
<名前>庄史</名前>
<試合>2</試合>
<打席>7</打席>
<打数>5</打数>
<得点>1</得点>
<ヒット>1</ヒット>
<二塁打>0</二塁打>
<三塁打>0</三塁打>
<ホームラン>0</ホームラン>
<打点>3</打点>
<盗塁>2</盗塁>
<犠打>0</犠打>
<四球>2</四球>
<三振>3</三振>
<得点圏打席>3</得点圏打席>
<得点圏打数>1</得点圏打数>
<得点圏ヒット>1</得点圏ヒット>
</bat>
</batter>

表示させるページ.php

<html>
<head>
</head>
<body>
<?php
$strDir=dirname(__FILE__);
$strXml=$strDir."/bat07.xml";
$strXsl=$strDir."/ave.xsl";
$objPrc=xslt_create();
$result=xslt_process($objPrc,$strXml,$strXsl);
print(mb_convert_encoding($result,"shift_jis","UTF-8"));
?>
</body>
</html>