我有一个大的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”, “国家”, “教授” 1,英国, '选项1,选项2,选项3' 2, '选项1,选项2' 3,USA, '选项2,选项3'
答案 0 :(得分:2)
使用XSLT 2.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>
加上一些简单的代码来添加标题行。
答案 1 :(得分:-2)
在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");
}
}