分析XML文件(包含“自关闭标记”)中的数据并输出到csv文件
本文关键字:文件 数据 csv 输出 自关闭标记 包含 XML 分析 | 更新日期: 2023-09-27 18:27:52
我有一个大的xml文件,其格式如下,我想将其转换为csv-otput,如下所示。我如何做到这一点,例如使用powershell、C#、,。。。。?
<name type="p" id="1" country="Uk">
<prof>
<option1/>
<option2/>
<option3/>
</prof>
</name>
<name type="p" id="2">
<prof>
<option1/>
<option2/>
</prof>
</name>
<name type="p" id="3" country="USA">
<prof>
<option2/>
<option3/>
</prof>
</name>
我需要的csv输出是:"id"、"country"、"prof"1,Uk,'选项1,选项2,选项3'2,"选项1,选项2"3,美国,"选项2,选项3"
使用XSLT2.0(例如使用Saxon或XmlPrime,两者都可以从C#调用)
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="name">
<xsl:value-of select="@id"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="@country"/>
<xsl:text>,'</xsl:text>
<xsl:value-of select="prof/*/name()" separator=","/>
<xsl:text>'
'</xsl:text>
</xsl:template>
</xsl:stylesheet>
再加上一些琐碎的代码来添加标题行。
在C#中,您可以使用以下方法来处理xml文件
public void GenerateCsv(string filePath)
{
if (File.Exists("Details.xml")) {
//Loading xml document with information
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("Details.xml");
XmlNodeList dataNodes = xmlDoc.SelectNodes("//nameList"); //specify root element of your xml document
foreach(XmlNode node in dataNodes) {
if(node.attributes != null)
{
string id= node.Attributes["id"].Value;// reading attribute values
if(node.HasChildNodes)
{
//loop through child nodes to get the data
}
}
}
} else {
Console.WriteLine("No data to read");
}
}