我对XML和C#本身还很陌生,所以如果这看起来很傻,我感到很抱歉。我正在尝试获取子xml元素值的值列表。让我进一步解释。
我有这样的xml代码,出于可读性考虑,我只发表了一篇文章,但它们都是一样的。
<posts>
<post id="1949239" reblogged-from-name="iwanttofly">
</post>
</posts>
这是代码
var rebloggers = (from n in document.Descendants("post") select n.Element("reblogged-from-name")).ToList().Select(x => x.Value);
我被这个例外欢迎
System.NullReferenceException: Object reference not set to an instance of an object.
at Jimese.Common.Utilities.TumblrUtilities.<>c.<FetchMediaForPage>b__0_1(XElement x) in C:\Users\admin\Desktop\Jimese\Utilities.cs:line 20
第20行是上面的代码,var rebloggers...
答案 0 :(得分:2)
reblogged-from-name
不是元素,而是属性。您应该改用n.Attribute("reblogged-from-name")
。
document.Descendants("post")
.Select(n => n.Attribute("reblogged-from-name").Value)
.ToList()
答案 1 :(得分:0)
我会将它作为xml进行C#反序列化。
创建您的类,例如:
[XmlRoot(ElementName="post")]
public class Post {
[XmlAttribute(AttributeName="id")]
public string Id { get; set; }
[XmlAttribute(AttributeName="reblogged-from-name")]
public string Rebloggedfromname { get; set; }
}
[XmlRoot(ElementName="posts")]
public class Posts {
[XmlElement(ElementName="post")]
public Post Post { get; set; }
}
然后使用xml反序列化
XmlSerializer serializer = new XmlSerializer(typeof(Posts));
using (TextReader reader = new StringReader(testData)) // test data is your xml
{
var result = (Posts) serializer.Deserialize(reader);
}