我有一个像这样的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; }
答案 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表达式:)。