的問題是命名空間 - 例如,類似:
XNamespace ns = "http://api.cnet.com/rest/v1.0/ns";
XElement techProd = doc.Root.Element(ns + "TechProduct");
Product product = new Product {
Id = (int)techProd.Attribute("id"),
Name = techProd.Element(ns + "Name").Value,
Topic = techProd.Element(ns + "Topic").Value,
TopicId = (int)techProd.Element(ns + "Topic").Attribute("id"),
ImageUrl = techProd.Element(ns + "ImageURL").Value,
ImageWidth = (int)techProd.Element(ns + "ImageURL").Attribute("width"),
};
您也可能更喜歡XmlSerializer
- 是這樣的:
XmlSerializer ser = new XmlSerializer(typeof(CnetResponse));
CnetResponse response = (CnetResponse)ser.Deserialize(new StringReader(xml));
TechProduct product = response.TechProduct;
有了這樣的類定義:
[Serializable, XmlRoot("CNETResponse", Namespace = CnetResponse.Namespace)]
public class CnetResponse {
public const string Namespace = "http://api.cnet.com/rest/v1.0/ns";
public TechProduct TechProduct { get; set; }
}
[Serializable, XmlType(Namespace = CnetResponse.Namespace)]
public class TechProduct
{
[XmlAttribute("id")]
public int Id { get; set; }
public string Name {get;set;}
public Topic Topic { get; set; }
[XmlElement("ImageURL")]
public Image Image { get; set; }
}
[Serializable, XmlType(Namespace = CnetResponse.Namespace)]
public class Topic {
[XmlAttribute("id")]
public int Id { get; set; }
[XmlText]
public string Text {get;set;}
}
[Serializable, XmlType(Namespace = CnetResponse.Namespace)]
public class Image {
[XmlAttribute("width")]
public int Width { get; set; }
[XmlText]
public string Url {get;set;}
}
或者,也可以通過xsd.exe
運行xml以獲取C#代碼西裝:
xsd foo.xml
xsd foo.xsd /classes
原來,這正是我的問題在這裏。感謝您幫助我解決這個問題,我完全被這個問題困擾。 – Beaker 2009-05-03 20:37:22