读取c#中的xml并转换为list

时间:2012-07-25 07:07:14

标签: c# xml linq-to-xml

我想读取这个xml并将其转换为list以插入数据库

请帮助

<?xml version="1.0" encoding="UTF-8"?>
-<xml>-<records>-<record><database path="J:\EndNote\PA-03\1.enl" name="1.enl">1.enl</database><source-app name="EndNote" version="14.0">EndNote</source-app><rec-number>38</rec-number>-<foreign-keys><key db-id="r50aeetv1taarsewtwsvrr2h2wtzde5z25pp" app="EN">38</key></foreign-keys><ref-type name="Journal Article">17</ref-type>-<contributors>-<authors>-<author><style size="100%" font="default" face="normal">Patrick Carpenter</style></author></authors></contributors>...

my xml schema

编辑:

用于导出的EndNote

它太乱了,它没有做到这一点

请检查

full xml link

2 个答案:

答案 0 :(得分:2)

最快的方法是使用xsd.exe生成序列化类:

1)生成模式定义

xsd file.xml [/outputdir:directory]

如果xml供应商已经全部使用了xsd模式(示例xml没有定义任何已使用的xsd模式),则不需要此步骤。

2)从xsd schema生成类:

xsd file.xsd {/classes | /dataset} [/element:element]
         [/language:language] [/namespace:namespace]
         [/outputdir:directory] [URI:uri]

3)使用xml序列化程序从生成的类中反序列化:

http://msdn.microsoft.com/en-us/library/dsh84875.aspx

答案 1 :(得分:1)

为XML内容模型创建类,例如:

class Records
{
    public List<Record> records { get; set }
}

class Record
{
    public RecordDatabase database { get; set }
    ...
    public int rec_number { get; set }
    ...
}

class RecordDatabase
{
    public string path { get; set }
    public string name { get; set }
}

...

然后,您可以将XML文件反序列化为对象:

Records records = null;
string path = "importfile.xml";
XmlSerializer serializer = new XmlSerializer(typeof(Cars[]));
StreamReader reader = new StreamReader(path);
reader.ReadToEnd();
records = (records)serializer.Deserialize(reader);
reader.Close();