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です。xsltproc(実際の変換にはlibxml2を使用しました)

<?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 に答える