Я создаю импорт данных из XML-файла для ввода в нашу CMS. Курс может содержать до 9 уровней модулей, и каждый уровень может иметь в себе несколько титулов модулей.C# XMLNodeList Элемент Foreach, содержимое группы по полю заголовка модуля из XML
например. XML
<test:modules>
<test:module>
<test:title>
<![CDATA[ Module title 1 ]]>
</test:title>
<test:content>
<![CDATA[ ]]>
</test:content>
<test:group>Year 1 Core Modules</lmu:group>
</test:module>
<test:module>
<test:title>
<![CDATA[ Module title 2 ]]>
</test:title>
<test:content>
<![CDATA[ ]]>
</test:content>
<test:group>Year 1 Core Modules</test:group>
</test:module>
<test:module>
<test:title>
<![CDATA[ Module title 1 ]]>
</test:title>
<test:content>
<![CDATA[ ]]>
</test:content>
<test:group>Year 2 Core Modules</test:group>
</test:module>
<test:module>
<test:title>
<![CDATA[ Module title 2 ]]>
</test:title>
<test:content>
<![CDATA[ ]]>
</test:content>
<test:group>Year 2 Core Modules</test:group>
</test:module>
<test:module>
<test:title>
<![CDATA[ Module title 1 ]]>
</test:title>
<test:content>
<![CDATA[ ]]>
</test:content>
<test:group>Year 3 Core Modules</test:group>
</test:module>
</test:modules>
то, что я хочу сделать, это цикл по каждому из пунктов, и для каждой группы, сохранить список Lī уль модулей под каждую «группой».
Я хотел бы сохранить это в 2D-массиве 9x3, поэтому я могу получить доступ к этому для импорта.
так:
modulesArray[0, 0] would be "Year 1 Core Modules"
modulesArray[0, 1] would be "<ul><li>Module title 1<li><li>Module title 2<li></ul>
Мой код выглядит следующим образом, но я не уверен, куда идти отсюда:
protected override FeedCourse MapXmlNodeToEntity(XElement p)
{
var xmlResult = new XmlDocument();
xmlResult.LoadXml(p.ToString());
var test = p.ToString();
var xmlnsManager = new XmlNamespaceManager(xmlResult.NameTable);
xmlnsManager.AddNamespace("ns", "http://xcri.org/profiles/1.2/catalog");
xmlnsManager.AddNamespace("xcriTerms", "http://xcri.org/profiles/catalog/terms");
xmlnsManager.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
xmlnsManager.AddNamespace("xhtml", "http://www.w3.org/1999/xhtml");
xmlnsManager.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");
xmlnsManager.AddNamespace("dcterms", "http://purl.org/dc/terms/");
xmlnsManager.AddNamespace("credit", "http://purl.org/net/cm");
xmlnsManager.AddNamespace("mlo", "http://purl.org/net/mlo");
xmlnsManager.AddNamespace("courseDataProgramme", "http://xcri.co.uk");
xmlnsManager.AddNamespace("test", "http://www.test.com");
var elements = xmlResult.ChildNodes;
var code =
xmlResult.DocumentElement.SelectSingleNode(
"dc:identifier[@xsi:type=\"courseDataProgramme:internalID\"]", xmlnsManager).InnerText;
var title = xmlResult.DocumentElement.SelectSingleNode("dc:title", xmlnsManager).InnerText;
var subject = xmlResult.DocumentElement.SelectSingleNode("dc:subject", xmlnsManager).InnerText;
String[,] modulesArray = new String[6, 3];
XmlNodeList modList = xmlResult.DocumentElement.SelectNodes("test:modules/test:module", xmlnsManager);
// var modulestest1 = modList.Item(1).InnerText;
int modulecount = 0;
int titlescount = modList.Count;
var previousModuleGroupTitle = "";
var modulecontenttitles = "";
foreach (XmlNode mn in modList)
{
var currentmodgroup = mn["test:group"].InnerText;
if (previousModuleGroupTitle == "")
{
modulecontenttitles += "<ul>";
modulecontenttitles += "<li>" + mn["test:title"].InnerText + "</li>";
}
if (previousModuleGroupTitle == mn["test:group"].InnerText)
{
modulecontenttitles += "<li>" + mn["test:title"].InnerText + "</li>";
}
else
{
modulecontenttitles += "</ul>";
modulecount++;
modulesArray[modulecount, 0] = modulecontenttitles;
modulecontenttitles = "";
modulecontenttitles += "<ul><li>" + mn["test:title"].InnerText + "</li>";
}
// modulesArray[modulecount, 0] = mn["test:title"].InnerText;
//modulesArray[modulecount, 1] = mn["test:content"].InnerText;
//modulesArray[modulecount, 2] = mn["test:group"].InnerText;
previousModuleGroupTitle = mn["test:group"].InnerText;
modulecount++;
}
modulesArray[0, 0].ToString();
}
Hi jdweng, Спасибо за возможное решение. Я обновил исходный код C# выше, чтобы показать вам, как я это делаю. Если цикл foreach может добавить их в элементы массива, это будет лучше, поэтому я могу получить к ним доступ непосредственно для импорта данных. Можете ли вы мне помочь, пожалуйста? Благодарим вас за помощь. – Andyram2k
Я сделал небольшое изменение кода. – jdweng