473,396 Members | 1,712 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

xmlns=''> was not expected.

Hi guys,Does any1 know what this error is all about, what I am trying to do is deserialize a XML, below is my code, let me know what I am doing wrongpublic class test{xin = "<?xml version='1.0' encoding='UTF-8'?><InSession><PassWord>foo</PassWord><UserName>fo*@foo.com</UserName></InSession>";XmlSerializer serializer = new XmlSerializer(typeof(cXmlBS));XmlTextReader tr = new XmlTextReader(new System.IO.StringReader(xin));cXmlBS cx = (cXmlBS)serializer.Deserialize(tr);tr.Close();}pub lic class cXmlBS{public String PassWord;public String UserName;}System.InvalidOperationException: There is an error in XML document (1, 40). ---> System.InvalidOperationException: <InSession xmlns=''> was not expected.
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationReader1.Read4_cXmlBS()
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlSerializer.Deserialize (XmlReader xmlReader, String encodingStyle)
at System.Xml.Serialization.XmlSerializer.Deserialize (XmlReader xmlReader)
at BathamWS.LoginService.BeginSession(String xin) in c:\inetpub\wwwroot\bathamws\loginws.asmx.cs:line 62
help is appreciated, thanksshailendra batham
Nov 12 '05 #1
4 59154
"Shailendra Batham" <sg******@sbcglobal.net> wrote in message news:Fj*****************@newssvr21.news.prodigy.co m...
Does any1 know what this error is all about, what I am trying to do is deserialize
a XML, below is my code, let me know what I am doing wrong : : System.InvalidOperationException: There is an error in XML document (1, 40).
---> System.InvalidOperationException: <InSession xmlns=''> was not expected.
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationReader1.Read4_cXmlBS()


The XML you are trying to deserialize looks like this,

<InSession>
<PassWord>foo</PassWord>
<UserName>fo*@foo.com</UserName>
</InSession>

However, the class you are deserializing into looks like this,

public class cXmlBS
{
public String PassWord;
public String UserName;
}

The difference is the root element name. Your XML contains an element named
"InSession" (without xmlns, that's all the message is saying there, it's extraneous
to the problem at hand). However, Deserialize( ) only knows how to look for
an element named "cXmlBS". It did not expect to see an element named "In-
Session," that is all the InvalidOperationException is telling you.

There are two solutions, change the element name in the XML you're deserializing
to match the class/type name:

<cXmlBS>
<PassWord>foo</PassWord>
<UserName>fo*@foo.com</UserName>
</cXmlBS>

or you can decorate the class/type name with an XmlRootAttribute that tells the
XmlSerializer that you want the XML element "InSession" to correspond to the
class cXmlBS's root element.

[XmlRoot( "InSession")]
public class cXmlBS
{
public String PassWord;
public String UserName;
}
Derek Harmon
Nov 12 '05 #2
Thanks Derek for the help I got my problem solved,

I have another question.

<?xml version='1.0' encoding='UTF-8'?>
<State>
<California>
<City>
<LosAngeles></LosAngeles>
<SantaMonica></SantaMonica>
<City>
</California>
<Illinois>
<City>
<Chicago></Chicago>
<City>
</Illinois>
</State>

suppose this is my xml document, how can I achieve serialization and
deserialization on this xml and get the results.

"Derek Harmon" <lo*******@msn.com> wrote in message
news:%2****************@TK2MSFTNGP12.phx.gbl...
"Shailendra Batham" <sg******@sbcglobal.net> wrote in message
news:Fj*****************@newssvr21.news.prodigy.co m...
Does any1 know what this error is all about, what I am trying to do is
deserialize
a XML, below is my code, let me know what I am doing wrong

: :
System.InvalidOperationException: There is an error in XML document (1,
40).
---> System.InvalidOperationException: <InSession xmlns=''> was not
expected.
at
Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationReader1.Read4_cXmlBS()


The XML you are trying to deserialize looks like this,

<InSession>
<PassWord>foo</PassWord>
<UserName>fo*@foo.com</UserName>
</InSession>

However, the class you are deserializing into looks like this,

public class cXmlBS
{
public String PassWord;
public String UserName;
}

The difference is the root element name. Your XML contains an element
named
"InSession" (without xmlns, that's all the message is saying there, it's
extraneous
to the problem at hand). However, Deserialize( ) only knows how to look
for
an element named "cXmlBS". It did not expect to see an element named "In-
Session," that is all the InvalidOperationException is telling you.

There are two solutions, change the element name in the XML you're
deserializing
to match the class/type name:

<cXmlBS>
<PassWord>foo</PassWord>
<UserName>fo*@foo.com</UserName>
</cXmlBS>

or you can decorate the class/type name with an XmlRootAttribute that
tells the
XmlSerializer that you want the XML element "InSession" to correspond to
the
class cXmlBS's root element.

[XmlRoot( "InSession")]
public class cXmlBS
{
public String PassWord;
public String UserName;
}
Derek Harmon

Nov 12 '05 #3
Apply XmlRoot attribute to your class:

[XmlRoot("InSession")]public class cXmlBS{public String PassWord;public String UserName;}
Nov 12 '05 #4
"Shailendra Batham" <sg******@sbcglobal.net> wrote in message news:uV****************@newssvr29.news.prodigy.com ...
<?xml version='1.0' encoding='UTF-8'?>
<State>
<California>
<City>
<LosAngeles></LosAngeles>
<SantaMonica></SantaMonica>
<City>
</California>
<Illinois>
<City>
<Chicago></Chicago>
<City>
</Illinois>
</State>

suppose this is my xml document, how can I achieve serialization and
deserialization on this xml and get the results.


It's not possible to serialize/deserialize this based on serialization
attributes alone because you've encoded the "data" into the element
names, instead of using the elements to describe it's "structure." (I'm
not going to preach why this is generally a bad idea.)

Instead, it's necessary to implement the IXmlSerializable interface.
Here's what you'll need for this little project:

* One XML schema document (which in this case, cannot
be too well structured, but you need on nevertheless),

* Two methods, one deserializing from an XmlReader and the
other serializing into an XmlWriter.

Making this more concrete involves crafting up the essential object
model you've presupposed in your desired XML document, so let
me do that first. These classes will be light on luxury (the IEnumerable
implementation isn't necessary for serialization, but to simplify the
test driver) while stressing relevance.

- - - States.cs
using System;
using System.Collections;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

public class CityObj
{
string cityName;

public CityObj( string cityName)
{
this.cityName = cityName;
}

public string City
{
get
{
return this.cityName;
}
set
{
this.cityName = value;
}
}
}

public class StateObj : IEnumerable
{
string stateName;
ArrayList cityList;

public StateObj( string stateName)
{
this.stateName = stateName;
this.cityList = new ArrayList( );
}

public StateObj( string stateName, CityObj[ ] cities)
{
this.stateName = stateName;
this.cityList = new ArrayList( cities);
}

public CityObj Add( string cityName)
{
CityObj city = new CityObj( cityName);
this.cityList.Add( city);
return city;
}

public string StateName
{
get
{
return this.stateName;
}
set
{
this.stateName = value;
}
}

IEnumerator IEnumerable.GetEnumerator( )
{
return ((IEnumerable)( this.cityList)).GetEnumerator( );
}
}
public class StateCollection : IXmlSerializable, IEnumerable
{
ArrayList stateList;
bool deserializedOK;

public StateCollection( )
{
this.stateList = new ArrayList( );
this.deserializedOK = true;
}

public bool IsOK
{
get
{
return this.deserializedOK;
}
}

public int Count
{
get
{
return this.stateList.Count;
}
}

public StateObj Add( string stateName)
{
StateObj st = new StateObj( stateName);
this.stateList.Add( st);
return st;
}

public StateObj Add( StateObj state)
{
this.stateList.Add( state);
return state;
}

IEnumerator IEnumerable.GetEnumerator( )
{
return ((IEnumerable)( this.stateList)).GetEnumerator( );
}

public XmlSchema GetSchema( )
{
// TO BE SUPPLIED.
}

public void ReadXml( XmlReader reader)
{
// TO BE SUPPLIED.
}

public void WriteXml( XmlWriter writer)
{
// TO BE SUPPLIED.
}
}
- - -

The first method of IXmlSerializable that you're going to implement
is GetSchema( ). This method needs to return an XML Schema
Document describing the expected format of the serialized instance
XML. Since I can't anticipate all of the states / provinces that your
application might require, there's very little I can do as far as defining
<xs:element>'s of it's structure. Instead, the heart of the lax schema
I'm going to use is the <xs:any> (note that the processContent attribute
is not allowed, however the any element will permit you free-wheeling
lattitude in the content of that element).

Here's the schema document, complete for your perusal.

- - - state.xsd
<?xml version='1.0'?>
<xs:schema id="States" xmlns:xs='http://www.w3.org/2001/XMLSchema'>

<!-- Global Type Definitions -->
<xs:complexType name="StatesType">
<xs:sequence>
<!-- Allow literally any content in the empty xmlns='' -->
<xs:any namespace="##local" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

<!-- Global Element Declaration -->
<xs:element name="States" type="StatesType" />

</xs:schema>
- - -

Now let's fill out the GetSchema( ) method, which simply loads
this file and returns a SOM XmlSchema instance.

public XmlSchema GetSchema()
{
FileStream xsdFile = new FileStream( "State.xsd", FileMode.Open);

// Optional ValidationEventHandler can be passed as 2nd argument here.
XmlSchema xsd = XmlSchema.Read( xsdFile, null);

xsdFile.Close( );
return xsd;
}

Pretty self-explanatory. Normally if we had had a more stringent
schema document, the step in which XmlSerializer gets the schema
would also perform schema-validation and it could detect validation
errors here (or notify your program through a ValidationEventHandler
you register in the XmlSchema.Read( ) method above).

The example I'm demonstrating will put the serialized content into a
container element named after the class, StateCollection, but
within there the content closely corresponds to what you want.
You may re-align the object model as is necessary for the app
at hand, but make sure you retain the xsd and xsi namespace
declarations.

Writing the XML out is the simplest operation, taking advantage
of the IEnumerable support in the object model we're using. It's
a straightforward application of the XmlWriter class that the
XmlSerializer will pass to this method when time comes to serialize
the StateCollection instance (or other IXmlSerializable implementation).

public void WriteXml( XmlWriter writer)
{
writer.WriteStartElement( "State");
writer.WriteAttributeString( "xmlns", "xsd", null, "http://www.w3.org/2001/XMLSchema");
writer.WriteAttributeString( "xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");

foreach( StateObj st in this )
{
writer.WriteStartElement( st.StateName);

// Assuming <City> is required, even when there are no child elements;
// if <City> is optional based on the existence of child elements, then
// move WriteStartElement( "City") and WriteEndElement() inside foreach
// loop and use a firstTimeOnly flag to write them.
//
writer.WriteStartElement( "City");
foreach( CityObj city in st)
{
writer.WriteStartElement( city.City);
writer.WriteFullEndElement( );
}
writer.WriteFullEndElement( ); // </City>

writer.WriteFullEndElement(); // </StateName>
}

writer.WriteEndElement(); // </State>
}

The reading portion is probably the most complicated as it involves
we maintain a state machine. In this example, when I'm between
the <State> element and the <City> element, I know any elements
I encounter are state names. If I've already encountered a <City>
element, but not yet a </City> closing tag, then I know any elements
are city names contained by the last (in-scope) state name.

The key indications that I'm changing state in my reading routine
are based off of the reader's IsStartElement( ) method, and tests
of whether I've encountered a NodeType of XmlEndElement. At
these points I look at the node's LocalName (which is either "State",
a state name, "City", or a city name). Although the end element
won't yield a local name, by diligently pushing every name onto a
Stack when they were start elements, I can safely pop them off
when I need the name of the current end element.

In order to track the transitions of this state machine I use a 'depth'
indicator where the opening/closing <State> is at the most shallow
depth (betweenStateAndCity == 1) and city names after a <City>
are the greatest depth (betweenStateAndCity == 3).

public void ReadXml( XmlReader reader)
{
Stack hopper = new Stack( );
bool reachedEnd = false;
int betweenStateAndCity = 1;

try
{
StateObj currentState = null;
while ( reader.Read( ) && !reachedEnd )
{
if ( reader.IsStartElement( ) )
{
string name = reader.LocalName;
hopper.Push( name);

if ( 0 == name.CompareTo( "State"))
{
++betweenStateAndCity;
}
else if ( 0 == name.CompareTo( "City"))
{
++betweenStateAndCity;
}
else if ( ( 2 == betweenStateAndCity ) && ( null == currentState ) )
{
currentState = new StateObj( name);
}
else if ( ( 3 == betweenStateAndCity ) && ( null != currentState ) )
{
currentState.Add( name);
}
Debug.WriteLine( "pushed {0}", name);
}
else if ( reader.NodeType == XmlNodeType.EndElement )
{
if ( hopper.Count > 0 )
{
string name = hopper.Pop( ) as string;
if ( 0 == name.CompareTo( "City"))
{
this.Add( currentState);
currentState = null;
--betweenStateAndCity;
}
if ( 0 == name.CompareTo( "State"))
{
reachedEnd = true;
--betweenStateAndCity;
}
Debug.WriteLine( "popped {0}", (name == null)? "(null)": name);
}
}
}
}
catch ( XmlException xe)
{
Debug.WriteLine( xe.Message);
this.deserializedOK = false;
}
}

While the subtleties of the above code's state transitions settle,
let's create a test driver that tries out this solution. I mean, will
IXmlSerializable really work, after all this typing you've done,
and having decomposed the schema of your desired XML into
an XmlReader implementation? Maybe this was wasted effort,
you might be thinking, at least until you can execute a tangible
example.

Here is that example.

- - - StateApp.cs
public class App
{
public static void Main( )
{
// Create a StateCollection
//
StateCollection usa = new StateCollection( );

// Add the sunshine state..
//
StateObj ca = usa.Add( "California");
ca.Add( "LosAngeles");
ca.Add( "SantaMonica");

// Add the land of Lincoln and the Windy City..
//
StateObj il = usa.Add( "Illinois");
il.Add( "Chicago");

// Give me something to write to (this will be UTF-16, but you can
// always serialize to another intermediary using UTF-8 encoding
// as your example XML presupposes).
//
StringBuilder buf = new StringBuilder( 1024);
StringWriter sw = new StringWriter( buf);

// Serialize the above StateCollection to XML in a string.
//
XmlSerializer ser = new XmlSerializer( typeof( StateCollection));
ser.Serialize( sw, usa);
sw.Flush( );

// Display results.
//
string xml = buf.ToString( );
Console.WriteLine( xml);

// Turn the string around into a Reader and then Deserialize it
// into a new instance of the StateCollection type.
//
StringReader sr = new StringReader( xml);
StateCollection eeuu = ser.Deserialize( sr) as StateCollection;
if ( null != eeuu )
{
// Did it deserialize successfully? (this was a property I impl'd above.)
//
Console.WriteLine( eeuu.IsOK);

// Loop through each State in this deserialized StateCollection.
//
foreach( StateObj st in eeuu)
{
Console.WriteLine( st.StateName);

// Loop through each City in this deserialized State.
//
foreach( CityObj city in st)
{
Console.WriteLine( "\t" + city.City);
}
}
}
}
}
- - -

When you run this you'll observe the following XML is generated by
the WriteXml( ) method,

- - - state.xml
<?xml version="1.0" encoding="utf-16"?>
<StateCollection>
<State xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.o
rg/2001/XMLSchema-instance">
<California>
<City>
<LosAngeles>
</LosAngeles>
<SantaMonica>
</SantaMonica>
</City>
</California>
<Illinois>
<City>
<Chicago>
</Chicago>
</City>
</Illinois>
</State>
</StateCollection>
- - -

The object model that's deserialized from this has the following structure,
matching what the test driver application originally created:

California
LosAngeles
SantaMonica
Illinois
Chicago
So, after all that, it is possible. Nevertheless, designing a schema in
which the local names of elements contain the information content of
the document, instead of describing it's structure, should be avoided.
Think of how much easier the following would've been to serialize (or
represent in an XML schema document):

- - - BetterStates.xml
<States>
<State name="California">
<City name="Los Angeles" />
<City name="Santa Monica" />
</State>
<State name="Illinois">
<City name="Chicago" />
</State>
</States>
- - -

In this schema, the elements and attribute names describe the structure,
and their values are the information content. Much more flexible and
adaptable, than the original solution (and it serializes more easily, too!). :-)
Derek Harmon
Nov 12 '05 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: Julia | last post by:
Hi,i am trying to DeSerialize the following class from an XML string and i get "<root xmlns=''> was not expected." public class Person { private string m_Name; private string m_Phone; ...
1
by: Stephen Edgecombe | last post by:
Hi Environment: Visual Studio .NET 2003 (vb) I am developing an XSD Schema and want to include some building blocks from another source, so they have a different namespace. - If I use an...
1
by: Shailendra Batham | last post by:
Hi guys,Does any1 know what this error is all about, what I am trying to do is deserialize a XML, below is my code, let me know what I am doing wrongpublic class test{xin = "<?xml version='1.0'...
4
by: pei_world | last post by:
I have followed a example from a book exactly, but it seems not working at all. can anyone tell me what is going on? ========= Global.asax.cs ============ public static Entry...
1
by: Rob R. Ainscough | last post by:
I'm using XmlSerializer to read the an XML file into an object collection. As soon as I .Deserialize(myFileStream) I get the above error: my XML looks like <?xml version="1.0"...
2
by: snowie | last post by:
I have a simillar problem to what others have had before me. I just can't find the solution in any earlier post here at the scripts (or any other forum). I am calling a web service that returns a...
2
by: aglaforge | last post by:
I'm attempting to write a quick piece of Javascript code that will validate if the end user of the javascript has the necessary VML attributes set in their HTML. The problem in IE is that...
1
by: ismailc | last post by:
Hi, I need help please. Update system to to new version & moved on to .Net2 But now my code that worked in my .Net1 xslt does not work. .Net1 fine: <xsl:stylesheet...
1
by: nwbabcock | last post by:
I'm using XmlSerializer to deserialize an xml into classes. The error I recieve is: Exception:There is an error in XML document (2, 2). Inner Exception: <applications...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.