dotgnu-general
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[DotGNU]XMLReader


From: Neil Cawse
Subject: [DotGNU]XMLReader
Date: Sat, 8 Nov 2003 11:40:34 -0500

Im completing ResX and ImageList serialization support in System.Windows.Forms. Once this is done, we will be able to run an “off the shelf” exe created using .net on our portable platform.

 

The ResX format is pretty straightforward. The ResX is written and tested against Microsofts System.XML. The writing of ResX works ok using our System.XML but the reading doesn’t because the XMLReader is returning empty values when I read. Ive attached a snippet of code below that uses the reader.

 

What I know about XML is a little dangerous. Would it be possible for someone to take a look at this and see where the XMLReader is failing? Who are the XML gurus?

 

The test code to see the failure is in the latest cvs: ilrun FormsTest, click on the ResX tab, click “write” then “read” and it will fail.

 

thanks!

Neil

 

In Resources\ResourceReader.cs

// Load the contents of an XML resource stream.

private void Load(XmlTextReader reader)

{

            reader.WhitespaceHandling = WhitespaceHandling.None;

                                               

            // Create NameTable

            reader.NameTable.Add("resheader");

            reader.NameTable.Add("resmimetype");

            reader.NameTable.Add("version");

            reader.NameTable.Add("reader");

            reader.NameTable.Add("writer");

 

            reader.NameTable.Add("data");

            reader.NameTable.Add("name");

            reader.NameTable.Add("type");

            reader.NameTable.Add("mimeType");

            reader.NameTable.Add("value");

                                               

            reader.NameTable.Add(ResXResourceWriter.BinSerializedObjectMimeType);

            reader.NameTable.Add(ResXResourceWriter.SoapSerializedObjectMimeType);

while (reader.Read())

{

                        if (reader.NodeType == XmlNodeType.Element)

                        {

                                    // Deal with the header

                                    if (reader.LocalName == "resheader")

                                    {

                                                switch (reader["name"])

                                                {

                                                            case "resmimetype":

                                                                        headerMimeType = reader.ReadElementString();

                                                                        break;

                                                            case "version":

                                                                        headerVersion = reader.ReadElementString();

                                                                        break;

                                                            case "reader":

                                                                        headerReader = reader.ReadElementString();

                                                                        break;

                                                            case "writer":

                                                                        headerWriter = reader.ReadElementString();

                                                                        break;

                                                }

                                    }

                                    // Deal with the data

                                    else if (reader.LocalName == "data")

                                    {

                                                String name = reader["name"];

                                                String type = reader["type"];

                                                String mimeType = reader["mimeType"];

                                                String value;

                                                if (reader.NodeType == XmlNodeType.Element)

                                                            value = reader.ReadElementString();

                                                else

                                                            value = reader.Value;

**** Problem - value is always null.

                                                if (mimeType != null)

                                                            LoadMime(name, type, mimeType, value);

                                                else if (type != null)

                                                            LoadType(name, type, value);

                                                else

                                                            loadedData[name] = value;

                                    }

                        }

            }

}


reply via email to

[Prev in Thread] Current Thread [Next in Thread]