One of the final requirements for our MAMLConverter project is to output the processed html tags (which resides in a List<ElementEnt> collection) and generate a XML file from it.
Our Data Layer (of type IHTMLData) has a SaveData() method which does the job nicely using LINQ to XML:
public bool SaveData(List<ElementEnt> dataList)
{
// TODO: Use filename (xml extension) of file submitted to workflow
string fileName = "temp.xml";
var xml = new XElement("developerConceptualDocument",
new XAttribute("snlmx", Resources.snlmx),
new XAttribute("snlmx_xlink", Resources.snlmx_xlink),
(from d in dataList
where d.MAMLTag != null && !d.IsIgnore && !d.IsCloseTag
select new XElement(d.MAMLTag, d.Content)));
// Final cleanup. LINQ XML complains if we attempt to use
// xmlns as a tag so we'll resolve after it is done above.
xml.ToString()
.Replace("snlmx_xlink", "xmlns:xlink")
.Replace("snlmx", "xmlns")
.StrToFile(fileName);
// TODO: Remove - FOR DEVELOPMENT PURPOSES
Process.Start(fileName);
return true;
}
The data structure it has to work with follows:
[TestMethod]
public void TestSaveProcessedListAsXML()
{
BootStrapper bootStrap = new BootStrapper();
string fileName = string.Format(mockFileName, CurrentDir);
IHTMLData dll = bootStrap.UnityContainer.Resolve<IHTMLData>();
if (dll.LoadData(fileName))
{
MAMLState state = bootStrap.UnityContainer.Resolve<MAMLState>();
state.HtmlData = dll.GetHtmlData();
using (MAMLWorkflowRuntime wfrt =
new MAMLWorkflowRuntime(bootStrap.UnityContainer))
{
wfrt.Start(typeof(HtmlToMAML));
Assert.IsTrue(dll.SaveData(wfrt.State.Data.HtmlData));
Assert.AreEqual(22, wfrt.State.Data.HtmlData.Count);
}
}
else
Assert.Fail(dll.Exception.Message);
Assert.Fail("Keep Unit Test checked for development");
}
Note below that we only have a few tags currently defined (resource file and TagCommands) so we still have some work to do. We'll also have to do some special post processing but for the most part have the core requirement's infrastructure in place. I've been able to complete the input/output of data easily/efficiently because of LINQ to XML.
BEFORE
AFTER
Tags:
linq,
workflow,
maml,
mamlconvert
Categories: