从XML文件解析数据(包含“自闭标签”)并输出到csv文件

时间:2015-12-22 11:36:40

标签: c# xml csv powershell

我有一个大的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'

2 个答案:

答案 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>'&#xa;'</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");
    }


}