XML Deserialization - xmlns not expected

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • nwbabcock
    New Member
    • Mar 2009
    • 6

    XML Deserialization - xmlns not expected

    I'm using XmlSerializer in C# to deserialize an xml into classes. First I generated the code from the schema using xsd.exe The error I recieve is:

    Exception:There is an error in XML document (2, 2).
    Inner Exception: <applications xmlns='urn:xmln s:COMMONCENSUS: CommonFormat:IM Schem a'> was not expected.

    I've read numerous threads and realize it is a namespace issue, but none seem to help with this particular problem. I've included the xml, and the Schema file below as well as the code. Thanks in advance.

    xml:
    Code:
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <applications xmlns="urn:xmlns:COMMONCENSUS:CommonFormat:IMSchem a" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exportType="T">
    <application guid="{9A44D2FF-90EB-45BE-BC88-CF2107B2CA4C}" xmlns="urn:xmlns:COMMONCENSUS:CommonFormat:IMSchem a">
    -----
    </application>
    </applications>
    xsd:
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:xmlns:COMMONCENSUS:CommonFormat:IMSchem a" xmlns:NS="urn:xmlns:COMMONCENSUS:CommonFormat:IMSc hema" targetNamespace="urn:xmlns:COMMONCENSUS:CommonForm at:IMSchema" elementFormDefault="qualified">
    <xs:element name="applications">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="application" type="ApplicationType" minOccurs="0" maxOccurs="unbounded">
    <xs:key name="personKey">
    <xs:selector xpath="persons/person" />
    <xs:field xpath="id" />
    </xs:key>
    <xs:keyref name="applicantKeyRef" refer="personKey">
    <xs:selector xpath="applicantID" />
    <xs:field xpath="." />
    </xs:keyref>
    <xs:keyref name="insuredKeyRef" refer="personKey">
    <xs:selector xpath="coverages/coverage/insuredID" />
    <xs:field xpath="." />
    </xs:keyref>
    </xs:element>
    </xs:sequence>
    <xs:attribute name="exportType" type="ExportType" />
    </xs:complexType>
    </xs:element>
    -----
    </xs:schema>
    Code:
    Code:
    // Read the xml file
    TextReader reader = new StreamReader("C:\\CommonSensusXml\\Policy_87654321 _210_Dion-Paul_WSA.xml");
    
    //Application Type
    XmlSerializer serializer = new XmlSerializer(typeof(ApplicationType));
    ApplicationType appType = (ApplicationType)serializer.Deserialize(reader);
    Last edited by Dormilich; Mar 19 '09, 05:20 AM. Reason: added [code] tags
  • jkmyoung
    Recognized Expert Top Contributor
    • Mar 2006
    • 2057

    #2
    Your namespace URI "urn:xmlns:COMM ONCENSUS:Common Format:IMSchem a"
    is not allowed to have spaces.

    Beyond that, I would recommend explicitly assigning the schema, eg like:
    xsi:schemaLocat ion = "urn:xmlns:COMM ONCENSUS:Common Format:IMSchema SchemaFile.xsd"

    Comment

    • nwbabcock
      New Member
      • Mar 2009
      • 6

      #3
      Thanks for the reply jkmyoung. Unfortunately, that is a typo and there is no space in the namespace uri. It should read like this: urn:xmlns:COMMO NCENSUS:CommonF ormat:IMSchema

      Any other thoughts?

      Thanks...

      Comment

      • jkmyoung
        Recognized Expert Top Contributor
        • Mar 2006
        • 2057

        #4
        Assuming your targetNamespace should also read: targetNamespace ="urn:xmlns:COM MONCENSUS:Commo nFormat:IMSchem a"

        See edit to above comment as well.

        Comment

        • nwbabcock
          New Member
          • Mar 2009
          • 6

          #5
          jkmyoung,
          Yes, the target namespace is correct. I tried to explicitly assign the schema like you mentioned but with the same error message as listed in my first post.
          To me, the error reads like there is a namespace specified in the xml file where it does not exist in the schema file. As far as I can tell, that's not the case.

          Thanks again for your prompt reply...any further advice is much appreciated.

          Comment

          • jkmyoung
            Recognized Expert Top Contributor
            • Mar 2006
            • 2057

            #6
            Just to clarify, targetnamespace should be
            "urn:xmlns:COMM ONCENSUS:Common Format:IMSchema "
            not what was posted above.

            Accidentally copied/paste, and forgot to replace the offending text.

            Comment

            • nwbabcock
              New Member
              • Mar 2009
              • 6

              #7
              Thanks again but still the same error. I've noticed that when I copy and paste from the xml into this text editor, it will add spaces in several places.

              I am still unable to find a solution for this. Could it be something in the way the schema is structured? The element name 'applications' acts as a parent element in the xml file but in the schema, there are several other elements that stand alone outside of the 'applications' element. If I need to provide more info I can create a mock xml and remove any sensitive data.

              Comment

              • prophet224
                New Member
                • Apr 2009
                • 2

                #8
                Similar problem

                Hey, I'm having a very similar problem. Don't know if you got yours fixed but if I find mine, I will post it here.

                My hunch is that it has to do with the declaration of the XmlSerializer. There is a constructor that does as follows (from http://msdn.microsoft.com/en-us/libr...(VS.71).aspx):

                "Initialize s a new instance of the XmlSerializer class that can serialize objects of the specified type into XML documents, and vice versa. Specifies the default namespace for all the XML elements."
                .
                .
                [C#] public XmlSerializer(T ype, string);"

                -Matt

                Comment

                • prophet224
                  New Member
                  • Apr 2009
                  • 2

                  #9
                  Ok, here's the fix for me. I was getting the same (2,2) and "was not expected" set of errors.

                  The section of my XML that was a problem looks like this:

                  Code:
                  <ns2:Info xmlns:ns2="http://www.something.org/whatsit-0-3-4">
                  This is the significant part of the code that xsd.exe generated for me:
                  ORIGINAL:
                  Code:
                  [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.something.org/whatsit-0-3-4")]
                  [System.Xml.Serialization.XmlRootAttribute("Some_Namespace", Namespace = "http://www.different.org/blah-1-3-2", IsNullable = false)]
                  FIXED & WORKING:
                  Code:
                  [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.something.org/whatsit-0-3-4")]
                  [System.Xml.Serialization.XmlRootAttribute("Info", Namespace = "http://www.something.org/whatsit-0-3-4", IsNullable = false)]
                  The problem for me was that the namespace was the root attribute in the feed I was getting, but the root was listed as a different namespace! Once I changed that and recompiled, it was able to deserialize, because it could now understand what it was looking at.

                  Hope this helps!
                  Last edited by Dormilich; Apr 22 '09, 06:34 AM. Reason: added [code] tags

                  Comment

                  Working...