2012-08-14 45 views
0

我使用XML2CSV帶條件的XML2CSV轉換過濾列| Unix操作系統的

XML格式我的XML文件轉換爲CSV可以在使用XML以CSV轉換器可以簡化爲

<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。有任何想法嗎。

編輯:只需要FirstName,Occupation和DateOfBirth的值。 CaseDetail或TransactionDetail的值不應該在結果文件中。 最終文件的格式應該是這樣

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

使用XSLT和XSLT處理器,雖然那麼你也可以只跳過整個xml2csv一步。該模板看起來像'match ='Occupation ='Student'「' – hroptatyr 2012-08-14 07:35:41

回答

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 
+0

感謝您的答覆。但我有一個問題。上面的xml是詳細文件的一部分,我的代碼在這個選定的塊上運行良好。現在,如果我的XML採用以下格式,應用什麼。 > > .... .... .... ,我必須從這種格式剝離信息.... – HardCode 2012-08-15 06:41:50

+0

I」我更新了我的代碼。 – hroptatyr 2012-08-15 07:08:44

+0

感謝您的及時回覆。你能告訴我如何避免輸出中包含標題標籤嗎?像我的XML開始與一些信息標籤,如,然後主要的XML,所以我怎麼能從輸出中去除這些標籤值。 – HardCode 2012-08-15 07:17:57