Мне сложно разобрать структуру xml ниже (с использованием C# .net 4.5) и сохранить в БД (Sql-Server).Анализ XML с более чем одним элементом
Я знаю, как разбирать, пока есть один атрибут каждой записи, например. Издательство; Дата (Год), но, как вы видите из структуры внутри авторов, существует более одного, где я боюсь.
Я использую XmlNodeList, XmlNode и InnerText для извлечения данных из каждого элемента.
Цените свое время и помощь
Структура XML
<Books>
<Book>
<title></title>
<date>
<year></year>
</date>
<Link></link>
<summary></summary>
<publisher>
<name></name>
</publisher>
<authors total="2">
<author>
<name></name>
</author>
<author>
<name></name>
</author>
</authors>
</Book>
</Books>
Я теперь прилагается код, который я использую, который работает отлично, за исключением (из-за этого иметь больше чем один атрибут в отличие от других)
XmlDocument xml = new XmlDocument();
xml.LoadXml(/*Here I pass the xml which has been stored in string variable. The structure of which has been in my original post*/);
XmlNodeList xnList = xml.SelectNodes("/Books[@*]");
foreach (XmlNode xn in xnList)
{
XmlNodeList anodes = xn.SelectNodes("Book");
foreach (XmlNode node in anodes)
{
if (anodes != null)
{
titles.Add(node["title"].InnerText); //titles is an list
summarys.Add(node["summary"].InnerText);//Summarys is an list
link.Add(node["Link"].InnerText);//link is an list
counter +=1;
}
}
XmlNodeList CNodes = xn.SelectNodes("Book");
foreach (XmlNode node2 in CNodes)
{
XmlNode example = node2.SelectSingleNode("date");
if (example != null)
{
years.Add(example["year"].InnerText);//years is an list
}
}
XmlNodeList dNodes = xn.SelectNodes("Book");
foreach (XmlNode node3 in dNodes)
{
XmlNode example1 = node3.SelectSingleNode("publisher");
if (example1 != null)
{
publishers.Add(example1["name"].InnerText);//publishers is an list
}
}
XmlNodeList fnodes = xn.SelectNodes("Book/authors/author/name");
foreach (XmlNode node5 in fnodes)
{
authors.Add(node5 != null ? node5.InnerText : "");//authors is an list. For the first book i need to store in list[0] and next in list[1]
}
}
// Convert list to array
titles.ToArray();
summarys.ToArray();
urls.ToArray();
years.ToArray();
publishers.ToArray();
authors.ToArray();
"*, который где я борюсь *" Как вы боролись? Можете ли вы показать нам фрагмент кода, чтобы мы могли понять, где именно вы не работаете? – JDB