Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Visual Studio 2010 : XML XSD Schema to Classes within the IDE

Whenever I have needed to create a class file from an XML XSD schema, I use the .NET xsd.exe tool and prebuild events, in VS, to ensure that my classes and schemas are in sync with each other at build time. This of course works fine, however...

I have noticed that if the XSD and derived class are in the same project VS understands the relationship and visually displays the CS as a child of the XSD file in solution explorer. So I was wondering if there is any functionality in Visual Studio 2010 to perform class creation for me within the IDE rather than relying on the prebuild script?

For example, I would add the XSD to the project set some options somewhere and VS takes over and creates my classes for me.

Does VS 2010 support anything like this? Or should I just stop wondering and continue to use xsd.exe and prebuild.

EDIT I have also noticed that under the properties of the XSD file I have the option to set a Custom Tool, reading the description this seems close to what I am aiming for but I am unsure of the correct usage for this property.

EDIT Also, if there is a solution I need this to be based on the features/functions that come as standard with VS2010. I would prefer to not use a 3rd party addon etc

like image 681
MrEyes Avatar asked Feb 03 '11 12:02

MrEyes


People also ask

How do I view the XML schema in Visual Studio?

To access the XML Schema Explorer, do one of the following: If you are on the Start View, click the XML Schema Explorer link. If you are on the Graph View or the Content Model View and have nodes in your workspace, use the context (right-click) menu to select the XML Schema Explorer.

How do I reference an XSD file in XML?

Reference the XSD schema in the XML document using XML schema instance attributes such as either xsi:schemaLocation or xsi:noNamespaceSchemaLocation. Add the XSD schema file to a schema cache and then connect that cache to the DOM document or SAX reader, prior to loading or parsing the XML document.


3 Answers

You can use the XSD.exe which is in C:\program files\Microsoft\SDKs\Windows\v7.0A\Bin\xsd.exe. follow the steps to add XSD as a menu item in VS tools menu

  1. Add XSD file to your VS project
  2. Go to visual studio Tools menu
  3. Go to external tools
  4. Add
  5. Enter the Title as XSD
  6. command as the path to xsd in your system(normaly C:\program files\Microsoft SDKs\Windows\v7.0A\Bin\xsd.exe. )
  7. Arguments as $(ItemPath) /c /l:cs
  8. initial directory as $(ItemDir)
  9. check the Use output window thats it press ok

Then click the Xsd files in your solution explorer and then tools--Xsd click, this will generate the class on the same folder as the .XSD file. If you already did not add the file in step 1, you will have to add the resulting .cs file into the project by right-clicking on the project in the Solution Explorer, select Add --> Existing Item and then the .CS file generated from the .XSD should be present and can be included.

like image 134
user2208720 Avatar answered Oct 05 '22 06:10

user2208720


Visual Studio 2010 in itself does not contain any such functionality for general consumption.

Visual Studio has some limited support for this XSD-to-code conversion in the context of typed datasets in ADO.NET - but those are not general-purpose solutions, they are targeted at exactly that one usage scenario.

But do check out the XSD2Code add-in that does exactly that

enter image description here

like image 33
marc_s Avatar answered Oct 05 '22 07:10

marc_s


There used to be a means to do that in Visual Studio. You could right click on an xml schema and there was a choice in the context menu that said something like "generate dataset." I used to use it frequently and it worked great. For some mysterious reason, Microsoft removed that function - maybe after VS 2003? I'm not sure why it's ok to use a command line utility and that it's not ok to execute the same code from a menu, but there it is.

like image 23
Bob Levittan Avatar answered Oct 05 '22 06:10

Bob Levittan