c# -从XML到数据库
本文关键字:数据库 XML | 更新日期: 2023-09-27 18:18:54
我得到了一个XML文件,它可以有几个节点,子节点,"子节点",…我想弄清楚如何获得这些数据,以便将它们存储到我自己的SQL Server数据库中。
我在网上读了一些教程,也尝试了一些东西。目前,我能够打开和读取文件,但不能检索数据。下面是我所做的:
class Program
{
static void Main(string[] args)
{
Person p = new Person();
string filePath = @"C:'Users'Desktop'ConsoleApplication1'XmlPersonTest.xml";
XmlDocument xmlDoc = new XmlDocument();
if(File.Exists(filePath))
{
xmlDoc.Load(filePath);
XmlElement elm = xmlDoc.DocumentElement;
XmlNodeList list = elm.ChildNodes;
Console.WriteLine("The root element contains {0} nodes",
list.Count);
}
else
{
Console.WriteLine("The file {0} could not be located",
filePath);
}
Console.Read();
}
}
下面是我的XML文件的一个小例子:
<person>
<name>McMannus</name>
<firstname>Fionn</firstname>
<age>21</age>
<nationality>Belge</nationality>
<car>
<mark>Audi</mark>
<model>A1</model>
<year>2013</year>
<hp>70</hp>
</car>
<car>
<mark>VW</mark>
<model>Golf 7</model>
<year>2014</year>
<hp>99</hp>
</car>
<car>
<mark>BMW</mark>
<model>Série 1</model>
<year>2013</year>
<hp>80</hp>
</car>
</person>
有什么建议或指导吗?
我使用XElement (Linq.Xml)编写了一个小方法来导航xml节点:
public string Get(XElement root, string path)
{
if (root== null)
return null;
string[] p = path.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
XElement at = root;
foreach (string n in p)
{
at = at.Element(n);
if (at == null)
return null;
}
return at.Value;
}
使用它,您可以通过Get(root, "rootNode/nodeA/nodeAChild/etc")
我前几天也经历过类似的事情。您应该尝试以下操作,首先构建一个模型:
- 打开XML文档
- 复制你的整个 XML文档。
- 打开Visual Studio.
- 点击初始类之外的区域(1b图)
- 在Visual Studio中选择编辑
- 粘贴特殊-粘贴为XML类
1 b:
namespace APICore
{
public class APIParser()
{
// Parse logic would go here.
}
// You would click here.
}
当您这样做时,您将得到一个有效的XML模型,它可以通过解析器访问,如何选择访问XML Web或Local将取决于您。为了简单起见,我将选择一个文件:
public class APIParser(string file)
{
// Person should be Xml Root Element Class.
XmlSerializer serialize = new XmlSerializer(typeof(Person));
using(FileStream stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
using(XmlReader reader XmlReader.Create(stream))
{
Person model = serialize.Deserialize(reader) as Person;
}
}
现在您已经成功地获得了要迭代的数据,因此您可以处理您的数据了。下面是一个示例:
// Iterates through each Person
foreach(var people in model.Person)
{
var information = people.Cars.SelectMany(obj => new { obj.Mark, obj.model, obj.year, obj.hp }).ToList();
}
您将执行类似的操作,然后写入数据库。这并不完全符合您的示例,但应该为您指明一个强有力的方向。