我正在使用XML2CSV
将我的XML文件转换为CSVXML格式可以简化为
<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
答案 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>
</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