0

我正在使用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
4

1 回答 1

1

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

<?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
于 2012-08-14T07:46:36.387 回答