-1

我有一个这样的 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").Value" 中的信息是存储在 MainParent 中的值。

我现在的问题是:

我无法确定 XML 文件中包含哪些值/子项/孙子项。因此,要成功将其导入 MySQL,我需要逐个导入所有元素,否则会出现错误并且导入不起作用。

我需要知道父/值名称/值或父/子/值名称/值。因为 Parent/Valuename/Value 将被导入到表“PARENT”中,而 Parent/Child/Valuename/value 将被导入到表“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; }
4

2 回答 2

1

Your question is still a bit vague. The reason I feel it's still a bit vague is because you state each XML is different, but I'm not sure how that relates to the Parent/Child/... flow.

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

This code will give you a list of all the distinct node names in your XML file.

I've answered a similar question Titled Reading dynamic elements from the xml file using c#`

于 2012-05-15T17:39:52.253 回答
0

要获取所有 XML 节点,只需使用以下命令:

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

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

于 2012-05-14T20:21:33.240 回答