我有一个XML文件,它可以有多个节点,子节点,“子子节点”,......我想弄清楚如何获取这些数据以便将它们存储到我自己的SQL Server数据库中
我在互联网上阅读了一些tutos,并尝试了一些东西。目前,我可以打开并读取文件,但不能检索数据。以下是我正在做的事情:
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>
任何建议或tuto做那些家伙?
答案 0 :(得分:0)
我使用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")
答案 1 :(得分:0)
好吧,前几天经历了类似的事情。您应该尝试以下方法,最初构建一个模型:
1B:
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();
}
你会做那样的事情,然后写入数据库。这完全不符合您的榜样,但应该指明您的方向。