我有一个来自我们本地会计系统的输出,它由一个信封标签和一个重复的字段序列组成,但没有分组。我以前没有 XSL 方面的经验,但一直在尝试为此寻找解决方案,并找到了适用于 XSLT 2.0 的解决方案。不幸的是,Access 2007 似乎只接受 XSLT 1.0 转换。
您能帮我找到一个有效的 XSLT 1.0 解决方案吗?
这是原始平面 XML 中的两条记录:
<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 可以完成的工作令人惊讶,但我的知识似乎太少了。提前感谢您的帮助和理解。