C# 使用C将XML文件转换为XML扁平化#
我需要转换XML文件,使其在Excel中可读。其思想是将XML文件展平。此外,我正在使用C#,因为大多数资源都可以帮助我使用我不需要的SQL 任何帮助都可以 资料来源:C# 使用C将XML文件转换为XML扁平化#,c#,.net,xml,C#,.net,Xml,我需要转换XML文件,使其在Excel中可读。其思想是将XML文件展平。此外,我正在使用C#,因为大多数资源都可以帮助我使用我不需要的SQL 任何帮助都可以 资料来源: <root> <product> <screen> Samsung </screen> <screen> Mecer </screen>
<root>
<product>
<screen>
Samsung
</screen>
<screen>
Mecer
</screen>
</product>
<product>
<phone>
Sony
</phone>
<phone>
Nokia
</phone>
</product>
</root>
三星
华荣汇
索尼
诺基亚
预期结果
<dataSet>
<row>
<column>
screen
</column>
<column>
phone
</column>
</row>
<row>
<column>
Samsung
</column>
<column>
Sony
</column>
</row>
<row>
<column>
Mecer
</column>
<column>
Nokia
</column>
</row>
</dataSet>
屏幕
电话
三星
索尼
华荣汇
诺基亚
更好的方法是创建类的新结构:
[Serializable]
[XmlRoot(ElementName = "dataSet")]
public class RootDataSet
{
[XmlElement(ElementName = "row")]
public List<Rows> Rows { get; set; }
}
[Serializable]
public class Rows
{
[XmlElement(ElementName = "column")]
public List<string> column { get; set; }
}
[可序列化]
[XmlRoot(ElementName=“数据集”)]
公共类根数据集
{
[XmlElement(ElementName=“行”)]
公共列表行{get;set;}
}
[可序列化]
公共类行
{
[xmlement(ElementName=“column”)]
公共列表列{get;set;}
}
在您确定之后,您可以将此代码放入一个方法中以生成文件
static void Main(string[] args)
{
using (Stream fileStream = new FileStream(@"C:\Nova pasta\file.xml", FileMode.OpenOrCreate))
{
RootDataSet dataset = new RootDataSet();
dataset.Rows = new List<Rows>();
Rows Rows1 = new Rows();
Rows1.column = new List<string>();
Rows1.column.Add("teste1");
Rows1.column.Add("teste2");
dataset.Rows.Add(Rows1);
//use reflection to get the properties names of the class
//get the values of the class
XmlSerializer xmlSerializer = new XmlSerializer(dataset.GetType());
xmlSerializer.Serialize(fileStream, dataset);
}
}
static void Main(字符串[]args)
{
使用(Stream fileStream=new fileStream(@“C:\Nova-pasta\file.xml”,FileMode.OpenOrCreate))
{
RootDataSet数据集=新的RootDataSet();
dataset.Rows=新列表();
行1=新行();
Rows1.column=新列表();
第1行。第1列。添加(“测试1”);
第1行。第1列。添加(“第2行”);
dataset.Rows.Add(第1行);
//使用反射获取类的属性名称
//获取类的值
XmlSerializer XmlSerializer=新的XmlSerializer(dataset.GetType());
序列化(文件流,数据集);
}
}
返回的文件将是:
<?xml version="1.0"?>
<dataSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<row>
<column>teste1</column>
<column>teste2</column>
</row>
</dataSet>
测试1
测试2
正如@June Paik所提到的,您可以使用XSLT
因为这将允许您配置如何转换XML,而无需每次重新编译应用程序(您只需修改XSLT并再次运行应用程序)
以下是XSLT的起点:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="node( ) | @*">
<xsl:copy><xsl:apply-templates select="@* | node( )"/></xsl:copy>
</xsl:template>
<!-- Name of the element you wish to find here-->
<xsl:template match="Product">
<!-- What you want to change it to here -->
<Row><xsl:apply-templates select="@* | node( )"/></Row>
</xsl:template>
</xsl:stylesheet>
要从
源代码
到预期结果
,您可以尝试…您尝试了什么?你有什么代码吗?你的问题有点模糊,但是如果你想把一个XML转换成另一个XML,你可以看看XslCompiledTransform(),它可以使用你想要的标记将XML表转换成几种不同的输出格式。如果这不是您的选项,您可能必须创建一个映射器类并自己映射所有标记。
XslCompiledTransform Trans = new XslCompiledTransform();
Trans.Load(@"C:\productTransform.xslt");
Trans.Transform("products.xml", "transformedProducts.xml");