I know this is a vague open ended question. I’m hoping to get some general direction.
I need to add cXML punchout to an ASP.NET C# site / application. This is replacing something that I wrote years ago in ColdFusion.
I’m a reasonably experienced C# developer but I haven’t done much with XML. There seems to be lots of different options for processing XML in .NET.
Here’s the open ended question: Assuming that I have an XML document in some form, eg a file or a string, what is the best way to read it into my code? I want to get the data and then query databases etc. The cXML document size and our traffic volumes are easily small enough so that loading the a cXML document into memory is not a problem.
Should I:
-
Manually build classes based on the DTD and use the XML Serializer?
-
Use a tool to generate classes. There are sample cXML files downloadable from Ariba.com.
I tried xsd.exe to generate an XSD and then xsd.exe /c to generate classes. When I try to deserialize I get errors because there seems to be "confusion" around whether some elements should be single values or arrays.
I tried the CodeXS online tool but that gives errors in it’s log and errors if I try to deserialize a sample document.
-
Create a dataset and ReadXml()?
-
Create a typed dataset and ReadXml()?
-
Use Linq to XML. I often use Linq to Objects so I’m familiar with Linq in general but I’m struggling to see what it gives me in this situation.
-
Some other means.
I guess I need to improve my understanding of XML in general but even so … am I missing some obvious way of doing this? In the old ColdFusion site I found a free component ("tag") which basically ignored any schema and read the XML into a "structure" which is essentially a series of nested hash tables which was then easy to read in code. That was probably quite sloppy but it worked.
I also need to generate XML files from my C# objects. Maybe Linq to XML will be good for that. I could start with a default "template" document and manipulate it before saving.
Thanks for any pointers …
If you need to generate arbitrary XML in an exact format, you should generate it manually using LINQ-to-XML.