在XML

2011-07-28 35 views
2

從電子表格轉換成列表的列表我試圖將電子表格導出到一個特定的xml配置導入PDF表單。我自己得到了很多,但我堅持看似乎接近尾聲。 (請注意,我對程序設計不太熟練,而我在XML/XSLT方面的經驗僅限於此項目)在XML

首先,我從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的路線似乎更可能)。我已經找到了答案,但沒有什麼能夠滿足我的需求。先謝謝你。

+1

你能將例如減少一些容易消化的,最好是不用滾動,比如說,使用A,B,C,1,2,3和更少列的表格?另外,如果你能顯示「我得到這個XML,而且我想取而代之」,那也可能有幫助。 –

+1

當然,我可以簡化它。對不起,我沒有太多的編碼或尋求幫助。希望現在更好。如果還有其他事情可以幫助你,請詢問。 – Scott

+0

什麼是開放式辦公室?您是否只是爲了將給定的CSV文件轉換爲XML而搜索?還請指出有針對性的XSLT版本。 –

回答

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>