Reputation: 25232
This should be easy but I am struggling to understand how to do this with XMLReader or with Linq.
This is a pet project I am working on over the weekend to improve my skills - Ideally this should have all nested objects as first class objects but I am open to ideas about how to interpret this
EDIT: I have tried the XMLReader but my code is more then 30 0lines wrong and looks horrible - In C# how can you translate XML into objects?
Can I deserialise this into an object by using a Deserialiser and if so do I construct all the objects by hand?
'<level4>
<module>
<moduleCode>ECSC401</moduleCode>
<moduleTitle>Programming Methodology</moduleTitle>
<credits>15</credits>
<semester>1</semester>
<assessmentDetails>
<assessment>
<assessmentName>Test1</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>30</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Coursework</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>40</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Test2</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>30</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
</assessmentDetails>
</module>
<module>
<moduleCode>ECSC404</moduleCode>
<moduleTitle>Computer Systems Fundamentals</moduleTitle>
<credits>15</credits>
<semester>1</semester>
<assessmentDetails>
<assessment>
<assessmentName>Test1</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>30</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Test2</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>30</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Test3</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>40</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
</assessmentDetails>
</module>
<module>
<moduleCode>EBSY401</moduleCode>
<moduleTitle>Information and Data Modelling</moduleTitle>
<credits>15</credits>
<semester>1</semester>
<assessmentDetails>
<assessment>
<assessmentName>Test</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>25</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Coursework1</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>10</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Coursework2</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>35</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Coursework3</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>30</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
</assessmentDetails>
</module>
<module>
<moduleCode>ECSC405</moduleCode>
<moduleTitle>Software Development Principles</moduleTitle>
<credits>15</credits>
<semester>2</semester>
<assessmentDetails>
<assessment>
<assessmentName>Test1</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>30</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Coursework</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>40</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Test2</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>30</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
</assessmentDetails>
</module>
<module>
<moduleCode>ECSC407</moduleCode>
<moduleTitle>Web Technology</moduleTitle>
<credits>15</credits>
<semester>2</semester>
<assessmentDetails>
<assessment>
<assessmentName>Tutorials</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>20</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Coursework</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>20</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Exam</assessmentName>
<assessmentType>Exam</assessmentType>
<assessmentWeighting>60</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
</assessmentDetails>
</module>
<module>
<moduleCode>ECSC409</moduleCode>
<moduleTitle>Software Engineering Principles</moduleTitle>
<credits>15</credits>
<semester>2</semester>
<assessmentDetails>
<assessment>
<assessmentName>Test1</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>40</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Coursework1</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>30</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Coursework2</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>30</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
</assessmentDetails>
</module>
<module>
<moduleCode>ECSC408</moduleCode>
<moduleTitle>Mathematics for Computing</moduleTitle>
<credits>15</credits>
<semester>0</semester>
<assessmentDetails>
<assessment>
<assessmentName>Coursework</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>50</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Exam</assessmentName>
<assessmentType>Exam</assessmentType>
<assessmentWeighting>50</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
</assessmentDetails>
</module>
<module>
<moduleCode>EBSY400</moduleCode>
<moduleTitle>Communication and Learning Skills</moduleTitle>
<credits>15</credits>
<semester>0</semester>
<assessmentDetails>
<assessment>
<assessmentName>Presentation</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>30</assessmentWeighting>
<assessmentDueDate>2010-05-06</assessmentDueDate>
</assessment>
<assessment>
<assessmentName>Portfolio</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>70</assessmentWeighting>
<assessmentDueDate>2010-05-06</assessmentDueDate>
</assessment>
</assessmentDetails>
</module>
</level4>
Upvotes: 1
Views: 2368
Reputation: 322
one way is to use the string with the xml data and the other one is "serializer" in which the XML serializer object to use to read the XML document.
And this function returns object and that is initialized instance of the object
public object LoadFromXmlDocument(string xmlDocument, XmlSerializer serializer)
{
if (StringUtil.IsEmpty(xmlDocument))
throw new ArgumentNullException("xmlDocument");
else if (serializer == null)
throw new ArgumentNullException("serializer");
//Initializing instance for textreader
TextReader reader = new StringReader(xmlDocument);
//Serializing a textreader content
object obj = serializer.Deserialize(reader);
reader.Close();
reader = null;
return obj;
}
Upvotes: 0
Reputation: 78467
I think I didn't understand your question before.
So you need to make a class that will be XML serialized and XML will have the layout you are showing?
If so, you need:
Create XSD schema. xsd.exe can infer schema from xml. You might need to correct inferred schema manually. To infer schema:
xsd.exe 1.xml
This will generate 1.xsd file.
Create C# classes using xsd.exe.
xsd.exe 1.xsd /classes /language:cs
This will generate 1.cs file.
Add 1.cs file to your project and use auto-generated classes in your code. Use XmlSeralizer to serialize/deserialize XML.
You can find xsd.exe in .NET SDK (for example C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64).
Upvotes: 1
Reputation: 78467
If you want to read XML text into XML object, I suggest using LINQ-to-XML.
You can use XDocument.Parse
or XDocument.Load
methods.
For example:
var xmlText = @"
<level4>
<module>
<moduleCode>ECSC401</moduleCode>
<moduleTitle>Programming Methodology</moduleTitle>
<credits>15</credits>
<semester>1</semester>
<assessmentDetails>
<assessment>
<assessmentName>Test1</assessmentName>
<assessmentType>Coursework</assessmentType>
<assessmentWeighting>30</assessmentWeighting>
<assessmentDueDate></assessmentDueDate>
</assessment>
</assessmentDetails>
</module>
</level4>
";
var xdocument = XDocument.Parse(xmlText);
Upvotes: 0
Reputation: 25339
One way is to use the XML Schema Definition Tool (Xsd.exe) that comes with the .NET framework tools. If you load your XML in Visual Studio you can use the Create Schema option (XML > Create Schema) and then use xsd.exe
to generate your classes using the /c
switch.
xsd.exe /c myschema.xsd
"Generates classes that correspond to the specified schema. To read XML data into the object, use the System.Xml.Serialization.XmlSerializer.Deserializer method."
Hope that gives you some ideas?
Upvotes: 0