Конвертировать XML в командную строку оболочки CSV

У меня есть большой файл XML (600 МБ), и я хочу преобразовать его в CSV с помощью команд терминала. Я попытался преобразовать XML в TXT с помощью команды xml2, используя следующий синтаксис.

xml2 < BIG.xml> BIG.txt

Мой XML Fromat -

<ReportDetails>
    <Date>08/08/2012</Date>
    <CaseNo>13030903</CaseNo>
    <UserDetailsText>Individual Details</UserDetailsText>
    <UserDetails>
        <UserId>0903</UserId>    
        <FirstName>John</FirstName>
        <Surname>Perry</Surname>
        <Occupation>Developer</Occupation>
        <DateofBirth>02/14/1981</DateofBirth>    
    </UserDetails>
    <ApplicationDetailsText>Conflict Resolution Details</ApplicationDetailsText>
    <ApplicationDetails>
        <ApplicationNo>13033</ApplicationNo>
        <ApplicationName>John Perry</ApplicationName>
        <Department>Information Technology</Department>
        <ApplicationType>Personal</ApplicationType>
        <ApplicationDate>06/07/2012</ApplicationDate>
        <ApplicationEndDate>09/07/2012</ApplicationEndDate>
        <ApplicationStatus>Closed</ApplicationStatus>    
     </ApplicationDetails>  
</ReportDetails>

Я хочу, чтобы эти поля в CSV-файле были разделены каналом (|)

Дата | CaseNo | FirstName | Фамилия | ApplicationNo | ApplicationName | ApplicationDate | ApplicationStatus

Также, если я хочу сделать файл через файл PHP, мне потребуется сценарий оболочки для этого.

5
задан 10 August 2012 в 10:43

1 ответ

Используйте XSL для преобразования в нужный вам формат; Например,

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:strip-space elements="*" />

<xsl:template match="/ReportDetails">
  <xsl:value-of select="Date"/><xsl:text>|</xsl:text>
  <xsl:value-of select="CaseNo"/><xsl:text>|</xsl:text>
  <xsl:apply-templates select="UserDetails" />
</xsl:template>

<xsl:template match="/ReportDetails/UserDetails">
  <xsl:value-of select="FirstName"/><xsl:text>|</xsl:text>
  <xsl:value-of select="Surname"/><xsl:text>|</xsl:text>
</xsl:template>

<!-- etc -->
</xsl:stylesheet>

И затем с учетом вышеизложенного (например, в foo.xsl для преобразования оригинального XML-документа foo.xml):

$ xsltproc  foo.xsl  foo.xml 
08/08/2012|13030903|John|Perry|

(Дьявол в деталях XSL ... Есть множество способов реализовать это ...)

0
ответ дан 10 August 2012 в 10:43

Другие вопросы по тегам:

Похожие вопросы: