2011-10-17 60 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) –

回答