I'm creating a data import from an XML file, to input into our CMS. A course can have up to 9 levels of modules, and each level can have multiple module titles within it.
e.g. 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>
what i want to do, is to loop through each of the items, and for each group, save a ul li list of modules under each "group".
I'd like to save this to a 9x3 2D array, so i can access this for the import.
so:
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>
My code is as follows, but i'm not sure where to go from here:
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();
}
Try this