エンベロープ タグと一連のフィールドの繰り返しだけで構成されているが、グループ化されていないローカル会計システムからの出力があります。私は XSL の経験がありませんが、これに対する解決策を見つけようとしており、XSLT 2.0 で機能する解決策を見つけました。残念ながら、Access 2007 は XSLT 1.0 変換のみを受け入れるようです。
機能する XSLT 1.0 ソリューションを見つけるのを手伝ってもらえますか?
これらは、元のフラット XML の 2 つのレコードです。
<ENVELOPE>
<DBCFIXED> <DBCDATE>1-Apr-2011</DBCDATE>
<DBCPARTY></DBCPARTY>
</DBCFIXED>
<DBCVCHTYPE>Stock Journal</DBCVCHTYPE>
<DBCVCHNO>1</DBCVCHNO>
<DBCVCHREF></DBCVCHREF>
<DBCSTNO></DBCSTNO>
<DBCSERVICETAXNO></DBCSERVICETAXNO>
<DBCPANNO></DBCPANNO>
<DBCCSTNO></DBCCSTNO>
<DBCNARR>Opening balance transfar</DBCNARR>
<DBCQTY>0.000 Kg</DBCQTY>
<DBCRATE></DBCRATE>
<DBCAMOUNT></DBCAMOUNT>
<DBCADDLCOST></DBCADDLCOST>
<DBCGROSSAMT></DBCGROSSAMT>
<DBCLEDAMT></DBCLEDAMT>
<DBCFIXED> <DBCDATE></DBCDATE>
<DBCPARTY>ME KN YARN BL 1</DBCPARTY>
</DBCFIXED>
<DBCVCHTYPE></DBCVCHTYPE>
<DBCVCHNO></DBCVCHNO>
<DBCVCHREF></DBCVCHREF>
<DBCSTNO></DBCSTNO>
<DBCSERVICETAXNO></DBCSERVICETAXNO>
<DBCPANNO></DBCPANNO>
<DBCCSTNO></DBCCSTNO>
<DBCNARR></DBCNARR>
<DBCQTY>0.150 Kg</DBCQTY>
<DBCRATE>566.00/Kg</DBCRATE>
<DBCAMOUNT>-84.90</DBCAMOUNT>
<DBCADDLCOST></DBCADDLCOST>
<DBCGROSSAMT></DBCGROSSAMT>
<DBCLEDAMT></DBCLEDAMT>
</ENVELOPE>
Access にインポートするには、データを DBCFIXED から次の DBCFIXED までのレコードにグループ化する必要があります。何かのようなもの:
<InventoryDaybook>
<record>
<DBCFIXED>
<DBCDATE>1-Apr-2011</DBCDATE>
<DBCPARTY/>
</DBCFIXED>
<DBCVCHTYPE>Stock Journal</DBCVCHTYPE>
<...></...>
</record>
<record>
<...></...>
</record>
/<InventoryDaybook>
動作する XSLT 2.0 コードは次のとおりです。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<InventoryDaybook>
<xsl:for-each-group select="*" group-starting-with="DBCFIXED">
<record>
<xsl:copy-of select="current-group()"/>
</record>
</xsl:for-each-group>
</InventoryDaybook>
</xsl:template>
</xsl:stylesheet>
XSL でできることは驚くべきことですが、私の知識は少なすぎるようです。