我想使用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;
}
}
答案 0 :(得分: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; }
}