具有条件|的XML2CSV转换筛选列* nix OS

时间:2012-08-14 05:45:05

标签: xml linux xml-parsing export-to-csv

我正在使用XML2CSV

将我的XML文件转换为CSV

XML格式可以简化为

<PersonalInfo>
    <UserDetail>
       <FirstName>ABC</FirstName>
       <Occupation>Student</Occupation>
       <DateOfBirth>08/14/1999</DateOfBirth>
    </UserDetail>
    <CaseDetail>....</CaseDetail>
    <TransactionDetail></TransactionDetail>
</PersonalInfo>      
<PersonalInfo>
    <UserDetail>
       <FirstName>XYZ</FirstName>
       <Occupation>Student</Occupation>
       <DateOfBirth>04/25/1991</DateOfBirth>
     </UserDetail>
     <CaseDetail>....</CaseDetail>
     <TransactionDetail></TransactionDetail>
</PersonalInfo>      
<PersonalInfo>
    <UserDetail>
        <FirstName>DEF</FirstName>
        <Occupation>Teacher</Occupation>
        <DateOfBirth>05/12/1984</DateOfBirth>
    </UserDetail>
    <CaseDetail>....</CaseDetail>
    <TransactionDetail></TransactionDetail>
</PersonalInfo>      

在使用XML到CSV转换器时,我只想转换Occupation标签具有Student值的字段。是否可以通过这个或我必须使用一些其他脚本来制作最终的xml文件,然后将其转换为CSV。任何想法。

编辑:只需要FirstName,Occupation和DateOfBirth的值。 CaseDetail或TransactionDetail中的任何值都不应该在结果文件中。 结束文件的格式应该是

 ABC|Student|08/14/1999 
 XYZ|Student|04/25/1991

1 个答案:

答案 0 :(得分:1)

现在将我的评论扩展到真正的答案。这是我用来直接将xml转换为csv的xslt。 (我使用libxml2的xsltproc进行实际转换)

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="PersonalInfo">
    <!-- causes only UserDetail nodes to be processed -->
    <xsl:apply-templates select="UserDetail"/>
  </xsl:template>

  <xsl:template match="UserDetail[Occupation='Student']">
    <xsl:value-of select="FirstName"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="Occupation"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="DateOfBirth"/>
    <xsl:text>&#0010;</xsl:text>
  </xsl:template>

  <!-- catch all the other userdetail here -->
  <xsl:template match="UserDetail"/>

</xsl:stylesheet>

应用于你的xml,这给出了:

ABC,Student,08/14/1999
XYZ,Student,04/25/1991