2011-10-17 62 views
1

我發誓我已經看過現有的線程!但我仍然需要幫助。XML到CSV轉換,併發症

我需要採取一些非常混亂的XML,並將其轉換爲一個非常整潔的CSS文件上傳到網站數據庫。

我並不需要一個完整的解決方案,但我需要幫助理解我應該遵循的過程來解決我在XSLT中的問題。我不會要求所有人爲我編碼,只是告訴我需要的元素和模板結構。如果社羣能夠解釋流程背後的邏輯,我也會喜歡,以便我可以根據需要對其進行修改。

我有一個在所有的訂單記錄和數字XML:

<record-list> 
    <record> 
     <title>Title One</title 
     <author>Author One</author> 
     <subject> 
       Subject One A 
       Subject One B 
       Subject One C 
     </subject> 
     <subject>Subject Two</subject> 
     <subject>Subject Three</subject> 
     <subject>Subject Four</subject> 
    </record> 
    <record> 
     <subject>Subject Five</subject> 
     <title>Title Two</title> 
     <useless-element>Extra Stuff One</useless-element> 
    </record> 
    <record> 
     <title>Title Three</title> 
     <subject>Subject Six</subject> 
     <author/> 
    </record> 
</record-list> 

所以我有重複的元素,一些缺少的元素,一些空元素,元素無序,以及額外的一些元素的多個號碼換行符。

我需要的CSV文件,其如下文中讀取,或具有不同數目的受試者重複(參見下面的要求),用於最終輸出

"Title","Subject","Subject","Subject","Author" 
"Title One","Subject One A ; Subject One B ; Subject One C","Subject Two","Subject Three","Author One" 
"Title Two", "Subject Five","","","" 
"Title Three","Subject Six","","","" 

要求

-The列數任何重複的元素或者需要將該記錄與該元素的最重複進行匹配,或者該程序需要切斷超過特定數目的任何重複。 - 每個新記錄都需要一個換行符,並且文件中不能存在其他換行符(僅作爲記錄定界符)。 - 每個記錄的每個元素需要以相同的順序排列。 - 每個元素文本需要引號(以處理內在的逗號)。 - 缺陷或空元素需要空白,逗號包圍引號。 - 額外的元素不能通過發送到輸出

我做了什麼:

我想通了如何擺脫使用翻譯功能的元素中多餘的換行符,雖然我很喜歡這個解決方案,它允許我用多個字符替換換行符(現在,我將不得不運行find-and-replace來將佔位符字符更改爲輸出中的空格 - 分號空格)。我可以使用文本元素和strip-whitespace在輸出中獲得引號,逗號和換行符。

但是,我不知道如何理順元素的順序,處理元素重複,或者只穿透一些元素,同時仍然使用元素作爲換行的提示。

現在,我只需要一個可行的解決方案,即使需要各種手動操作或多個樣式表。只要輸出是好的,我甚至可以在文本編輯器中進行查找和替換。請幫助一個XSLT解決方案,我甚至不會開始知道任何其他合適的編程語言(多年前的大學matlab沒有幫助)。

我想我需要運行兩個轉換。我查看了XSLT聖經,Mangano的XSLT Cookbook,他使用了兩個變換來解決類似的問題。但是,他的解決方案如此廣泛,我無法理解。如果我無法弄清楚它是如何工作的,我不能根據我的需要進行修改。對不起,但沒有編程背景,本網站和文本中的解釋充其量是充滿挑戰的。不過,與其他人在本論壇上詢問的相比,我認爲我提出了一些新穎的功能問題。

任何幫助,無論是非廣義的代碼,或者甚至只是一個建議的程序,通過我的處理器多次運行將是美好的。我一直在爲此奮鬥了一個多星期,而且取得的進展甚微。

感謝 CAMC

+1

我知道這是一個編碼問答網站,也許你真的想編碼自己的答案,但一個快速的谷歌'xml到csv'拋出了一些可能有用的工具,例如。 [XML Converter](http://www.xml-converter.com/?from=adwords) –

回答