<?xml version="1.0" encoding="UTF-8"?>
<FirstTag version="1.0" createTime="15:59:59" DATE="20161209">
<SecondTag Name="House01">
<a>
<Furniture FURN_ID="FUR00001" FURN_AMT="2" price="10000"/>
<Furniture FURN_ID="FUR00002" FURN_AMT="1" price="20000"/>
</a>
<b>
<Furniture FURN_ID="FUR00001" FURN_AMT="2" price="30000"/>
<Furniture FURN_ID="FUR00003" FURN_AMT="1" price="40000"/>
</b>
<c>
<Furniture FURN_ID="FUR00002" FURN_AMT="2" price="50000"/>
<Furniture FURN_ID="FUR00003" FURN_AMT="1" price="60000"/>
</c>
<d>
<Furniture FURN_ID="FUR00001" FURN_AMT="1" price="70000"/>
<Furniture FURN_ID="FUR00002" FURN_AMT="2" price="80000"/>
</d>
<e>
<Furniture FURN_ID="FUR00002" FURN_AMT="1" price="90000"/>
<Furniture FURN_ID="FUR00003" FURN_AMT="2" price="100000"/>
</e>
<f>
<Furniture FURN_ID="FUR00001" FURN_AMT="1" price="110000"/>
<Furniture FURN_ID="FUR00002" FURN_AMT="2" price="120000"/>
<Furniture FURN_ID="FUR00003" FURN_AMT="2" price="120000"/>
</f>
</SecondTag>
</FirstTag>
上記は、Javaプログラムから作成した単純なxml(ノード値付き)です。ポイントは、このxmlデータをUI /バッチプロセスからのcsvロード機能がある別のアプリケーションに送信したいと思います。私はXSLTについて聞いたことがありますが、それを使用しないで、チュートリアルのいくつかを試しましたが、csvにすべての値を取得する時間に混乱しました。ここで XMLからCSVへの変換
は(いくつかの計算を行う必要があり、成功した後、起動する)ことは、CSVでどのように見えるかです:1家(HOUSE01)この例では私は、出力したいすべての別の部屋の家具(すなわち、部屋1、bは部屋2、cは部屋3など)。私はXSLTを構築しようとしてきた
、以下のXSLTです:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:text>Name,Furn_Id,a,b,c,d,e,f
</xsl:text>
<xsl:variable name="delimiter" select="','" />
<xsl:for-each select="//SecondTag">
<xsl:variable name="hname" select="@Name"/>
<xsl:for-each select="f/Furniture">
<xsl:value-of select='$hname' />
<xsl:value-of select="$delimiter"/>
<xsl:variable name="var1" select="@FURN_ID"/>
<xsl:variable name="varamt1" select="@FURN_AMT"/>
<xsl:for-each select="//a/Furniture">
<xsl:variable name="var2" select="@FURN_ID"/>
<xsl:variable name="varamt2" select="@FURN_AMT"/>
<xsl:if test="$var1 = $var2">
<xsl:value-of select='$var2' />
<xsl:value-of select="$delimiter"/>
<xsl:value-of select='$varamt2' />
<xsl:value-of select="$delimiter"/>
</xsl:if>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
私は別のページからいくつかの基準を使用していますし、CSVにXMLを変換するためにいくつかの簡単なXSLTを構築することができ、しかし、私は主なXML問題を解決するためにいくつかのガイダンスが必要です。
将来、ループ内にノード値を取得できたら、各部屋のすべての家具の合計価格を合計したいと思います。
Name,Furn_Id,a,b,c,d,e,f
House01,FUR00001,20000,60000,,70000,,110000
House01,FUR00002,20000,,100000,160000,90000,240000
House01,FUR00003,,40000,60000,,200000,240000
ありがとう:
は、最終的なCSV形式の結果を予想します。
Getting the value of an attribute in XML
** 1。**以上の家はありますか? ** 2。**すべての家はまったく同じ「部屋」(a、b、c、d、e、f)を持っていますか? ** 3。**どのXSLTプロセッサを使用しますか? –
@ michael.hor257k 1.XSLT 1.0 – Nico
XSLT 1.0プロセッサは具体的にどのようなものですか?プロセッサがサポートしている場合は、ここで拡張機能を使用できます。 –