LINQ to XML从文件中获取所有节点名称

时间:2012-05-14 20:02:33

标签: c# mysql xml linq parent-child

我有一个像这样的XML文件。

Parent
-Value
-Value
-Child
--Value
--Value
---Grandchild
----Value
---GrandchildEND
-ChildEND
-Value
-Child2
......

XML文件的结构是可变的。意味着每个XML都有不同的Childs,Grandchilds等。 我想打开XML文件,并将XML文件中的数据输入到MYSQL数据库。

这里我使用的代码打开XML并将信息输入MySQL。

                while (hardcore < 50000)
            {
                try
                {
                    XDocument xmlDoc2 = XDocument.Load("c:\\a.xml");
                    var simpleQuery2 = (from Mainparent in xmlDoc2.Descendants("Mainparent")
                                        select Mainparent).FirstOrDefault();
                    dbcon.Insert
                        (
                        simpleQuery2.Element("id").Value,
                        simpleQuery2.Element("action").Value,
                        simpleQuery2.Element("ordernr").Value,
                        simpleQuery2.Element("typ").Value,
                        simpleQuery2.Element("orderdate").Value,
                        simpleQuery2.Element("p4code").Value,
                        simpleQuery2.Element("runtime").Value,
                        );
                }
                catch (NullReferenceException)
                {
                    textBox1.Text = "did a stupid mistake mofo";
                }
                hardcore++;
            }

来自“simpleQuery2.Element(”id“)的信息。值”是MainParent中存储的值。

我现在的问题是:

我无法确定哪些值/子/孙..在XML文件中。 因此,要成功将其导入MySQL,我需要逐个导入所有元素,否则我会收到错误并且导入无效。

我需要知道Parent / Valuename / Value或Parent / Child / Valuename / value。 因为Parent / Valuename / Value将导入表“PARENT” 并且父/子/ Valuename /值将导入表“CHILD”。

如果我知道哪些孩子/孙子,我知道会有什么价值。

我已经可以获得元素的完整列表:

            XDocument xmlDoc2 = XDocument.Load("c:\\a.xml");
        foreach (var name in xmlDoc2.Root.DescendantNodes().OfType<XElement>()
                .Select(x => x.Name).Distinct())
        { textBox1.Text = textBox1.Text + "\r\n"+name; }

2 个答案:

答案 0 :(得分:1)

你的问题仍然有点模糊。我觉得它仍然有点模糊的原因是因为你声明每个XML都不同,但我不确定它与Parent / Child / ...流程的关系。

var nodeNames = XDoucment.root.Descendants()
                              .Select(e => e.Name.Localname)
                              .Distinct()
                              .ToList() 

此代码将为您提供XML文件中所有不同节点名称的列表。

我回答了一个类似的问题 Reading dynamic elements from the xml file using c#`

答案 1 :(得分:0)

要获取所有XML节点,只需使用:

XmlDocument xml_doc = new XmlDocument(); 
xml_doc.Load(something);
XmlNodeList list = xml_doc.SelectNodes("//*");

如果您想要更多内容,只需修改XPath表达式:)。