分析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"

分析XML文件(包含“自关闭标记”)中的数据并输出到csv文件

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

}