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 に答える