0

我想使用 XmlSerializer 提取图像属性“href”。

如果我的设置如下所示,它将起作用:

<images>
       <image id="285">  
          http://images1.com/test.jpg" 
       </image>

       <image id="286">
          http://images1.com/test.jpg"
       </image>       
</images>

但如果它看起来像这样,则不是:

<images>
    <image href=http://images1.com/test.jpg" id="285" />
    <image href=http://images1.com/test.jpg" id="286" />        
</images>

这是我的对象

   private string[] imageList;
   [XmlArrayItem("image", typeof(object))]
   [XmlArray("images")]

    public string[] imageLink
    {
        get
        {
            return imageList;
        }
        set
        {
            imageList = value;
        }

    }

4

1 回答 1

1

我尝试了多种方法来尝试让序列化程序符合这个 XML,但运气不佳。

你可能只想做这样的事情:

    string xml = @"<images>
    <image href=""http://images1.com/test.jpg"" id=""285"" />
    <image href=""http://images1.com/test2.jpg"" id=""286"" />        
</images>";

    List<string> images = new List<string>();
    using (StringReader sr = new StringReader(xml))
    using (XmlTextReader xr = new XmlTextReader(sr))
    {
        while (!xr.EOF)
        {
            xr.MoveToContent();
            xr.ReadToDescendant("image");
            xr.MoveToAttribute("href");
            xr.ReadAttributeValue();            
            images.Add(xr.Value);
            xr.MoveToElement();
            if (xr.Name != "images")
            {
                xr.ReadElementString();
            }
            else
            {
                xr.ReadEndElement();
            }
        }
    }

我做了更多的研究,并想出了一种使用序列化并获得所需 XML 的方法:

[XmlRoot("images")]
public class ImageListWrapper
{
    public ImageListWrapper()
    {
        Images = new List<Image>(); 
    }

    [XmlElement("image")]
    public List<Image> Images
    {
        get; set;
    }

    public List<string> GetImageLocations()
    {
        List<string> imageLocations = new List<string>();

        foreach (Image image in Images)
        {
            imageLocations.Add(image.Href);
        }

        return imageLocations;
    }
}

[XmlRoot("image")]
public class Image
{
    [XmlAttribute("href")]
    public string Href { get; set; }
}
于 2012-07-27T23:01:03.270 回答