问题描述:

I have an XML file that I'm receiving form a third party provider.

It's not structured in the conventional way, it basically has no Root :-

<DG_X

attrib1="Test2"

attrib2="1"

attrib3="12345">TEST-23456</DG_X>

<DG_Y

attrib1="test"

attrib2="Example Text"

attrib3="1"

attrib4="3"

attrib5= 1

attrib6="12412342134">Test-1234567</DG_Y>

I'm only interested in the first Element "DG_X" and i only need its value "TEST-23456".

I'm new to De-Serialistaion, and so far my attempts have failed :-

[Serializable]

[XmlRoot("DG_X")]

public class DM

{

[XmlText]

public string Value { get; set; }

[XmlAttribute]

public string attrib1 { get; set; }

[XmlAttribute]

public string attrib2 { get; set; }

[XmlAttribute]

public string attrib3 { get; set; }

[XmlIgnore]

[XmlElement("DG_Y")]

public string dg_key { get; set; }

}

The problem lies with reading the second Element, The compiler advises that there are two root elements. What is the best way to tackle this issue?

网友答案:

The following should work for your example


 XmlReader xR = XmlReader.Create(@"example.xml");
            xR.MoveToContent();

            XmlSerializer xser = new XmlSerializer(typeof(DM));
            DM dmInstance = xser.Deserialize(xR) as DM;

We're basically using an XmlReader to position ourselfs on the first element and using that to deserialize into the object instance.

Hope this helps,

网友答案:

I managed to get round my problem with the following code:-

This was the only way I could get round having no root node in the file.

using (var fileSteam = new StreamReader(fileStream))
            {
                var settings = new XmlReaderSettings {ConformanceLevel = ConformanceLevel.Fragment};

                using (var reader = XmlReader.Create(fileSteam, settings))
                {
                    if (!reader.IsStartElement()) 
                        return String.Empty;

                    var reference = reader.ReadElementContentAsString();
                    return reference.StartsWith("DM-") ? reference : string.Format("DM-{0}", reference);
                }
相关阅读:
Top