パーソナルツール
現在の場所: ホーム ブログ MAGIC V10解析(3)
« 2018June »
Su Mo Tu We Th Fr Sa
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
このBlogについて
 代表の向井田ことMUKAです。当ブログサイトでは、MAGICやDB2に関する技術者向け情報を公開しています。お気軽にお立ち寄り下さい。
最近のエントリ
xpa版 いろいろ… muka 2018年03月24日
ソース管理ツール xpa版の不具合 muka 2018年03月16日
MAGIC ソース管理ツール SMSYS muka 2018年03月10日
twitter / 新RT機能を英語モードで・・・ muka 2009年11月19日
twitter / List Widget muka 2009年11月03日
twitter API / Retweet の仕様が・・・ muka 2009年10月30日
twitter API / Lists muka 2009年10月24日
IBM Rational Software Conference 2009 と アジャイル開発 muka 2009年10月08日
最近のコメント
Detectable adi- keeping labial bent cyclophosphamide dentists. ovarukexh 2018年06月19日
Paraoesophageal failure; immunities cheap cialis 20mg hemidiaphragm average, perceives 16. awovyayachizo 2018年06月19日
Invasive fixation azithromycin dosage thoracotomy where to buy zithromax dribbling transbronchial mastectomy. aqonawo 2018年06月19日
Crosstalk amoxicillin reconstruction focal quetiapine while! ovoherakuma 2018年06月19日
Deceleration cheap nexium away: passage formulated palate, radio-opaque. idujamujeaw 2018年06月19日
Therefore, operators utility blossoming displace. ahuyowa 2018年06月18日
Serum particular: prednisone coughs, neurosis, electrolyte clonidine, explain. omuyuvib 2018年06月18日
While buy sertraline continued corkscrew crisis-led mosquito, splenomegaly liquor. umoyefowoyam 2018年06月18日
最近のトラックバック
Club DB2 8/29の感想エントリと今後の予定 Unofficial DB2 BLOG 2009年09月01日
カテゴリ
misc (50)
dbMAGIC (50)
DB2 (50)
mail (50)
Web (50)
twitter (50)
 

MAGIC V10解析(3)


 今日はクライアントの人たち(同業者)と、ちょっとした忘年会でした。ほんとに楽しかった。話題は尽きず、あっという間に数時間が過ぎてしまった・・・。
 ということで、今帰ったところです。
 その席上、このブログを見てくれていると聞いて、ちょっと嬉しかった。でもその彼に言われた。「あんなこと書いて良いんですか?」って・・・。どういう意味かと一瞬考えたけど、「え、誰もみてないでしょう?」と思わず答えてしまった・・・。うーん、変な応え・・・。(^^;
 でも、なんか悪いこと書いてるのかな?(w)

 さて、前回までは、プログラムの一覧の取得だったんですが、それよりちょっとやっかいな問題は、タスクの一覧取得です。なぜなら、タスクは再帰的に記述されているんです。
 あまりよい例が無いので、テスト用にプログラムを作成してみます。

v10tasktree.jpg

 このプログラムのXMLファイルをブラウザで見たのが下図です。

v10taskxmltree.jpg

 そう、<Task>タグの中に、また<Task>タグが出てくるんですね!

 でも、ご安心。XSLTは何だってできます!
 取り敢えず、いつものように、prg03.htmlを作成して、9行目と、12行目を下記のように修正します。(##の部分はテストするプログラムのid番号を指定します。)

9行目:    objDoc.load("Source/Prg_##.xml");
12行目:    objStl.load("prg03.xsl");
prg03.xslは下記のソースをコピペします。
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 version="1.0">
<xsl:output method="html" version="4.0" encoding="Shift_JIS" />
<xsl:template match="/">
<html>
<head><title>プログラム内タスク一覧(その1)</title></head>
<body>
<xsl:apply-templates select="Application" />
</body>
</html>
</xsl:template>
<xsl:template match="Application">
<xsl:apply-templates select="ProgramsRepository" />
</xsl:template>
<xsl:template match="ProgramsRepository">
<xsl:apply-templates select="Programs" />
</xsl:template>
<xsl:template match="Programs">
<xsl:apply-templates select="Task" /> ・・・①
</xsl:template>
<xsl:template match="Task">
<xsl:value-of select="concat(Header/@ISN_2,'.',
Header/@Description)" /><br/>
<xsl:apply-templates select="Task"/>   ・・・②
</xsl:template>
</xsl:stylesheet>
 ①、②と入れたところは、ソースに書かないで下さいね。
 ①で呼ばれるテンプレートの中の②のところで、再度自分自身(Taskのテンプレート)を呼んでいます。(ここがミソです!)
 これで、再帰的に、タスクの番号(Header/@ISN_2)とタスク名(Header/@Description)の一覧を取得します。「concat()」関数は文字列の連結を行うものです。
 さて、結果を見てみましょう!

v10tasktreeres.jpg

 あれ?なんで6の次が8なの?
 そう言えば、間違って作成してしまったタスクを1個削除したんです。それで1個飛んでしまったわけですね。(なるほど・・・)

 一応、タスクの一覧は取得できたんですけど、これではツリーっぽくないですね。ネストしてる雰囲気が無いので、ちょっと工夫してみたのが次の改良版です。
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 version="1.0">
<xsl:output method="html" version="4.0" encoding="Shift_JIS" />
<xsl:template match="/">
<html>
<head><title>プログラム内タスク一覧(その2)</title></head>
<body>
Version : <xsl:value-of select="Application/Header/Version/@val"/><br/>
WithIsn : <xsl:value-of select="Application/Header/WithIsn/@val"/><br/>
IsRoot : <xsl:value-of select="Application/Header/IsRoot/@val"/><br/>
InIndex : <xsl:value-of select="Application/Header/InIndex/@val"/><br/>
<p />
<xsl:apply-templates select="Application" />
</body>
</html>
</xsl:template>
<xsl:template match="Application">
<xsl:apply-templates select="ProgramsRepository" />
</xsl:template>
<xsl:template match="ProgramsRepository">
<xsl:apply-templates select="Programs" />
</xsl:template>
<xsl:template match="Programs">
<table border="2" width="100%" align="center">
<tr bgcolor="#f0f0c0">
<td align="center" colspan="10"><b>ProgramsRepository</b></td>
</tr>
<tr bgcolor="#c0f0f0">
<td width="4%" align="center" valign="middle" rowspan="2">
<nobr>No.</nobr></td>
<td width="4%" align="center" valign="middle" rowspan="2">
<nobr>Levl</nobr></td>
<td width="4%" align="center" valign="middle" rowspan="2">
<nobr>Tree</nobr></td>
<td width="2%" align="center" valign="middle" rowspan="2">
<nobr>B/O</nobr></td>
<td width="36%" align="center" valign="middle" rowspan="2">
<nobr>Description</nobr></td>
<td width="10%" align="center" valign="middle" colspan="2">
<nobr>Parameters</nobr></td>
<td width="10%" align="center" valign="middle" colspan="2">
<nobr>LastModified</nobr></td>
<td width="30%" align="center" valign="middle" rowspan="2">
<nobr>Comment</nobr></td>
</tr>
<tr bgcolor="#c0f0f0">
<td width="5%" align="center" valign="middle">
<nobr>Count</nobr></td>
<td width="5%" align="center" valign="middle">
<nobr>Attributes</nobr></td>
<td width="5%" align="center" valign="middle">
<nobr>Date</nobr></td>
<td width="5%" align="center" valign="middle">
<nobr>Time</nobr></td>
</tr>
<xsl:apply-templates select="Task" />
</table>
<p />
</xsl:template>
<xsl:template match="Task">
<xsl:param name="TDepth" select="0" />
<xsl:param name="TreeID" select="0" />
<tr>
<td align="right"><xsl:value-of select="Header/@ISN_2" /></td>
<td align="right"><xsl:value-of select="$TDepth" /></td>
<td><xsl:value-of select="substring(concat($TreeID,'.'
,string(position())),4)" /></td>
<td><xsl:value-of select="Header/TaskType/@val" /></td>
<td><xsl:value-of select="Header/@Description" /></td>
<td align="right">
<xsl:value-of select="Header/ReturnValue/ParametersCount/@val"/>
</td>
<td align="left">
<xsl:value-of
select="Header/ReturnValue/ParametersAttributes/@ParametersAttributes"/>
</td>
<td><xsl:value-of select="Header/LastModified/@date"/></td>
<td><xsl:value-of select="Header/LastModified/@time"/></td>
<td><xsl:value-of select="Header/Comment/@val"/></td>
</tr>
<xsl:apply-templates select="Task">
<xsl:with-param name="TDepth" select="$TDepth + 1" />
<xsl:with-param name="TreeID" select="concat($TreeID,'.',
string(position()))"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
 一部、ちょっと荒っぽい書き方してるんですが、ご勘弁・・・。
 結果は次の通り!おぉ、やればできるもんです。(>XSLT)

v10tasktreetbl.jpg



MAGIC V10解析(1) MAGIC V10解析(1)
サイズ 8337 - File type text/html
MAGIC V10解析(2) MAGIC V10解析(2)
サイズ 8904 - File type text/html
カテゴリ
dbMAGIC