59
votes

I need to generate classes from xml that doesn't provide a schema. I understand this is near useless, but the fact is we have xml, it's structured, and we should be able to create a model from the xml. In the past I've done it by hand, but the current xml documents I am working with are quite large and my time would probably be better spent building something that does what I need. But, I am guessing it has already been done, and I just can't find it.

Any pointers?

3

3 Answers

68
votes

There are many tools available (a quick google search should fetch you some) that can generate XSD from XML assuming string type for almost everything. You should be able to use that XSD to run JAXB to get classes.

Here's an online tool that lets you do that.

And here is a screen cap: enter image description here

14
votes

From your xml file, you can create a XML Schema Definition (XSD) file. Once you have the XSD, you'll be able to generate the code, need it be for java, C#, C++, or all of the above.

If you have Visual Studio, you can use xsd.exe to generate the XSD file.

References:

  • www.xmlforasp.net/CodeBank/System_Xml_Schema/BuildSchema/BuildXMLSchema.aspx

  • msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.71).aspx

  • Command Syntax: xsd file.xml [/outputdir:directory]

  • so "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\xsd.exe" example.xml yields a example.xsd file in the same directory as the xml file.

XSD to Java: Reference:

XSD to C++: References:

  • stackoverflow.com/questions/445905/xml-schema-to-c-classes
  • www.codesynthesis.com/products/xsd/

XSD to C#: Reference:

  • quickstart.developerfusion.co.uk/quickstart/howto/doc/xmlserialization/XSDToCls.aspx
  • Command Syntax: "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\xsd.exe" -c -l:c# -n:SomeNameSpace example.xsd
1
votes

If the XML was created by JAXB, it can easily be converted back into objects. There's a tutorial over at oracle which illustrates one way to do this. Spring framework offers similiar features using JAXB which are very conveniant.