XML Validation with XSD in Visual Studio IDE

前端 未结 5 1530
别跟我提以往
别跟我提以往 2020-11-28 02:32

I know I have done this before, but it isn\'t working today, nor can I find anywhere that explains how to do it. It could be my lack of sleep, but I suspect gremlins.

相关标签:
5条回答
  • 2020-11-28 02:59

    I had this same problem, but VS was referencing my schema correctly already. Turns out the file I was trying to validate didn't have an 'xml' file extension. Added .xml to the end of my filename, and the validation started to work.

    0 讨论(0)
  • 2020-11-28 03:09

    You'll need to associate the XML document in Visual Studio with the XSD file you have.

    1. You should see something like this in your Properties window of the XML document:

    2. In the XML schema set editor (opens when you click on the (...) ellipsis in the "Schemas" textbox in your Properties window) you need to make sure you have your schema present. Also, make sure the Use column for that schema is enabled - if not, click on it - you'll get a drop-down list of options, pick the Use one with the green checkmark:

    3. Make sure Visual Studio's Error List windows is visible (menu View > Error List). This will show all inconsistencies between XML and XSD schema definitions.

    4. Once all of that is in place, the Visual Studio XML editor should highlight problems with your XML in the editor using blue squigglies:

    0 讨论(0)
  • 2020-11-28 03:14

    Does your xsd contain an attribute "targetNamespace" /schema/@targetNamespace that is similar to the namespace you are referencing in the xml?

    Examples:

    XSD:

    <xs:schema .... targetNamespace="Datafile.xsd" ... >
    

    XML:

    <data xmlns="Datafile.xsd" >...</data>
    

    See also: XML/XSD intellisense not working in Visual Studio 2010

    0 讨论(0)
  • 2020-11-28 03:23

    Another point of failure here is Windows 7 "blocking" schema files... right-click on the xsd file on disk, Properties > General and if it's blocked, you'll have an "Unblock" button. This was causing my XML validation to fail in VS2012.

    0 讨论(0)
  • 2020-11-28 03:25

    You don't need to manually associate the files in Visual Studio - it will automatically match an XML file to a XSD file if you have them both open, and you have your namespace defined correctly.

    To define the namespace:

    In the XML file's root element:

    <Data xmlns='http://yourdomain.com/yourschema.xsd'>
        ...
    </Data>
    

    In the XSD file's schema element:

    <xs:schema
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://yourdomain.com/yourschema.xsd"
        xmlns:this="http://yourdomain.com/yourschema.xsd"
        elementFormDefault="qualified">
        ...
    </xs:schema>
    

    A note on using Types in your schema when you have a targetNamespace

    Because you are specifying a targetNamespace in your schema, any references to types defined in the schema will need to be prefixed with a namespace (which is why we added the xmlns:this attribute in the above <xs:schema /> element).

    <!-- Define the type as normal -->
    <xs:complexType name="Row">
        <xs:sequence>
            <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
            <xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
    <!-- Use the type (note the "this:" prefix) -->
    <xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />
    
    0 讨论(0)
提交回复
热议问题