- PR -

XML の XSLT での変換について

1
投稿者投稿内容
素人
会議室デビュー日: 2006/02/01
投稿数: 1
投稿日時: 2006-02-01 18:36
初めて投稿させて頂きます。
XML の変換についてお聞きしたいのですが、
任意の場所に要素タグを挿入することは可能でしょうか?

-----------------------------------------------------
現在の XML ファイル
<?xml version = '1.0' encoding = 'UTF-8'?>
<ALL>
<GROUPS>
<COMPANY>AAA</COMPANY>
<DETAIL>
<ORDER>
<ITEM>DELL</ITEM>
<ORDER_NUM>20</ORDER_NUM>
<PRICE>100000</PRICE>
<SUB_TOTAL>2000000</SUB_TOTAL>
</ORDER>
</DETAIL>
<DETAIL>
<ORDER>
<ITEM>FM-V</ITEM>
<ORDER_NUM>5</ORDER_NUM>
<PRICE>200000</PRICE>
<SUB_TOTAL>1000000</SUB_TOTAL>
</ORDER>
</DETAIL>
<COMPANY>BBB</COMPANY>
<DETAIL>
<ORDER>
<ITEM>Let's note</ITEM>
<ORDER_NUM>5</ORDER_NUM>
<PRICE>200000</PRICE>
<SUB_TOTAL>1000000</SUB_TOTAL>
</ORDER>
</DETAIL>
<DETAIL>
<ORDER>
<ITEM>Dyna Book</ITEM>
<ORDER_NUM>3</ORDER_NUM>
<PRICE>150000</PRICE>
<SUB_TOTAL>450000</SUB_TOTAL>
</ORDER>
</DETAIL>
</GROUPS>
</ALL>
---------------------------------------------------

この XML の <GROUPS> の下にもう一階層作る感じで <GROUP> タグで <COMPANY>
から次の <COMPANY> までを囲むように追加したいと思っております。
簡単に書くとこのような感じです。

<GROUPS>
<GROUP>
<COMPANY>AAA</COMPANY>
<DETAIL>
<ORDER>
<ITEM>DELL</ITEM>
</ORDER>
</DETAIL>
</GROUP>
<GROUP>
<COMPANY>BBB</COMPANY>
</GROUP>
</GROUPS>

また、元となる XML、XSL は下記の通りです。
-----------------------------------------------------------------
base.xml

<?xml version = '1.0' encoding = 'UTF-8'?>
<ROWSET>
<ROW num="1">
<COMPANY>AAA</COMPANY>
<ITEM>DELL</ITEM>
<ORDER_NUM>20</ORDER_NUM>
<PRICE>100000</PRICE>
<SUB_TOTAL>2000000</SUB_TOTAL>
</ROW>
<ROW num="2">
<COMPANY>AAA</COMPANY>
<ITEM>FM-V</ITEM>
<ORDER_NUM>5</ORDER_NUM>
<PRICE>200000</PRICE>
<SUB_TOTAL>1000000</SUB_TOTAL>
</ROW>
<ROW num="3">
<COMPANY>BBB</COMPANY>
<ITEM>Let's note</ITEM>
<ORDER_NUM>5</ORDER_NUM>
<PRICE>200000</PRICE>
<SUB_TOTAL>1000000</SUB_TOTAL>
</ROW>
<ROW num="4">
<COMPANY>BBB</COMPANY>
<ITEM>Dyna Book</ITEM>
<ORDER_NUM>3</ORDER_NUM>
<PRICE>150000</PRICE>
<SUB_TOTAL>450000</SUB_TOTAL>
</ROW>
</ROWSET>
-------------------------------------------------------
trans.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<xsl:apply-templates select="ROWSET"/>
</xsl:template>
<xsl:template match="ROWSET">

<ALL>
<GROUPS>
<xsl:for-each select="ROW">
<xsl:if test="not(COMPANY=preceding::ROW/COMPANY)">
<COMPANY>
<xsl:value-of select="COMPANY"/>
</COMPANY>
</xsl:if>
<DETAIL>
<ORDER>
<ITEM>
<xsl:value-of select="ITEM"/>
</ITEM>
<ORDER_NUM>
<xsl:value-of select="ORDER_NUM"/>
</ORDER_NUM>
<PRICE>
<xsl:value-of select="PRICE"/>
</PRICE>
<SUB_TOTAL>
<xsl:value-of select="SUB_TOTAL"/>
</SUB_TOTAL>
</ORDER>
</DETAIL>
</xsl:for-each>
</GROUPS>
</ALL>
</xsl:template>
</xsl:stylesheet>
-----------------------------------------------------------

以上、長くなってしまいましたがどなたかご教授頂ければ幸いです。
よろしくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)