对象引用未设置为使用linq to xml的对象实例
本文关键字:xml to 对象 实例 linq 设置 对象引用 | 更新日期: 2023-09-27 17:49:58
<?xml version="1.0" encoding="utf-8"?>
<root>
<Message type="sms">
<Details locale="en" message-type="User.ResetPassword" />
<Context>
<Parameter name="Time" value=" 16:03:31" />
<Parameter name="pswr" value="00" />
<Parameter name="Date" value="18/12/2014" />
</Context>
<Receiver>+923328749199</Receiver>
</Message>
我的代码是
XElement xelement = XElement.Load("C:''Users''qadeer.hussain''Desktop''gw-msg-2.xml");
var name = from nm in xelement.Elements("Message")
where (string)nm.Element("Receiver") == "+923328749199"
select nm;
foreach (XElement xEle in name)
Console.WriteLine(xEle.value);
我不知道为什么我得到这个错误,你能帮我解决这个问题吗
这是一个使用Xlement
来解析所提供的xml的解决方案,注意在方法GetMessageFromXml
中,检查null,使用FirstOrDefault
和使用Attributes
' Elements '来分离或遍历xml。
var xml = XElement.Parse(GetXmlToProcess());
var messages = xml.Elements("Message").Select(x=>
{
return GetMessageFromXml(x);
});
//method to parse
public Message GetMessageFromXml( XElement elem)
{
var msg = new Message();
var type = elem.Attributes("type").FirstOrDefault();
msg.Type =type != null? type.Value : null;
var detail =elem.Elements("Details");
if (detail != null)
{
var locale = detail.Attributes("locale").FirstOrDefault();
var messageType = detail.Attributes("message-type").FirstOrDefault();
msg.Details = new Detail()
{
Locale=locale != null? locale.Value: null,
MessageType= messageType != null? messageType.Value: null
};
}
var reciever =elem.Elements("Receiver").FirstOrDefault();
if (reciever != null)
{
msg.Receiver = reciever.Value;
}
var context = elem.Elements("Context");
if (context != null)
{
msg.Context = new Context();
msg.Context.Parameters.AddRange(context.Elements("Parameter").Select(x=>
{
var parameter = new Parameter();
var name = x.Attributes("name").FirstOrDefault();
var value = x.Attributes("value").FirstOrDefault();
parameter.Name = name!= null? name.Value:null;
parameter.Value = value!=null? value.Value:null;
return parameter;
}).ToList());
}
return msg;
}
使用的类
public class Message
{
public string Type{get; set;}
public Detail Details {get; set;}
public Context Context {get; set;}
public string Receiver{get;set;}
}
public class Detail
{
public string Locale{get;set;}
public string MessageType{get;set;}
}
public class Context
{
public List<Parameter> Parameters {get;set;}
public Context()
{
Parameters = new List<Parameter>();
}
}
public class Parameter
{
public string Name {get;set;}
public string Value {get;set;}
}