我正在尝试将电子表格导出到特定的xml布局以导入到pdf表单中。我自己已经走得很远了,但我似乎已经接近尾声了。 (请注意,我对编程的能力不是很熟悉,而且我对XML / XSLT的经验仅限于此项目)
首先,我从pdf中导出了一组示例数据,这让我了解了我在寻找什么。然后我将其导入Excel并从数据中获取电子表格。这让我可以轻松地编辑数据,然后理论上将其导出回来,但是......由于“列表列表”问题,Excel不会导出它在导入时创建的XML映射。这导致我将speadsheet放入OpenOffice(技术上是LibreOffice)并使用XSLT尝试XML导出过滤器。
我在电子表格中的数据看起来像......
Type Name Compound Weight Material Weight
AAA BBB X 5 s 2
AAA BBB X 5 t 3
AAA BBB Y 4 r 4
我需要将其导出为......
<?xml version="1.0" encoding="UTF-8" ?>
- <MCD Type="AAA" Name="BBB">
- <Product Compound="X">
<Amount weight="5"/>
- <HM Material="s">
<Amount weight="2" />
</HM>
- <HM Material="t">
<Amount weight="3" />
</HM>
</Product>
- <Product Compound="Y">
<Amount weight="4"/>
- <HM Material="r">
<Amount weight="4" />
</HM>
</Product>
</MCD>
但是使用我目前的XSL,我得到的东西更像......
<?xml version="1.0" encoding="UTF-8" ?>
- <MCD Type="AAA" Name="BBB">
- <Product Compound="X">
<Amount weight="5"/>
- <HM Material="s">
<Amount weight="2" />
</HM>
</Product>
</MCD>
- <MCD Type="AAA" Name="BBB">
- <Product Compound="X">
- <HM Material="t">
<Amount weight="3" />
</HM>
</Product>
</MCD>
- <MCD Type="AAA" Name="BBB">
- <Product Compound="Y">
<Amount weight="4"/>
- <HM Material="r">
<Amount weight="4" />
</HM>
</Product>
</MCD>
我的问题在于电子表格的每个单元格都在输出中。我想让父单元格在变化时才被去除,就像在文件夹树中一样。我希望这是有道理的,有人可以帮助我(要么使它在excel或openoffice中工作,尽管从我的搜索看起来似乎更有可能是OpenOffice路由)。我已经仔细寻找答案,但没有什么能满足我的需求。提前谢谢。
答案 0 :(得分:0)
如果您正在使用XSLT 2,请从上一个XML开始并使用以下样式表:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each-group select="//MCD" group-by="concat(@Type,'-',@Name)">
<MCD Type="{@Type}" Name="{@Name}">
<xsl:for-each select="//Product[(parent::MCD/@Type = substring-before(current-grouping-key(),'-')) and (parent::MCD/@Name = substring-after(current-grouping-key(),'-'))]">
<xsl:copy-of select="." />
</xsl:for-each>
</MCD>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
你会得到:
<?xml version="1.0" encoding="UTF-8"?><MCD Type="AAA" Name="BBB"><Product Compound="X">
<Amount weight="5"/>
<HM Material="s">
<Amount weight="2"/>
</HM>
</Product><Product Compound="X">
<HM Material="t">
<Amount weight="3"/>
</HM>
</Product><Product Compound="Y">
<Amount weight="4"/>
<HM Material="r">
<Amount weight="4"/>
</HM>
</Product></MCD>