2016-03-03 6 views
0

У меня есть XML:Извлечение элемента из XML с помощью Entity - C#

<messageheaders startindex="0" count="3" totalcount="3" xmlns="http://api.esendex.com/ns/"> 
- <messageheader id="74dfea3e-a196-4ae0-9595-105c9f59cc01" uri="https://api.esendex.com/v1.0/messageheaders/74dfea3e-a196-4ae0-9595-105c9f59cc01"> 
    <reference>EX0196276</reference> 
    <status>Submitted</status> 
    <sentat>2016-03-03T08:01:32.97Z</sentat> 
    <laststatusat>2016-03-03T08:01:32.97Z</laststatusat> 
    <submittedat>2016-03-03T08:01:32.97Z</submittedat> 
    <receivedat>2016-03-03T08:01:32.97Z</receivedat> 
    <type>SMS</type> 
- <to> 
    <phonenumber>34627176544</phonenumber> 
    </to> 
- <from> 
    <phonenumber>447908583018</phonenumber> 
    </from> 
    <summary>837680710A4714672983100303090100640000000000000...</summary> 
    <body id="74dfea3e-a196-4ae0-9595-105c9f59cc01" uri="https://api.esendex.com/v1.0/messageheaders/74dfea3e-a196-4ae0-9595-105c9f59cc01/body" /> 
    <direction>Inbound</direction> 
    <parts>1</parts> 
    <readat>0001-01-01T00:00:00Z</readat> 
    </messageheader> 
- <messageheader id="8e835eda-d6d7-46e4-ab44-4df20bd133a4" uri="https://api.esendex.com/v1.0/messageheaders/8e835eda-d6d7-46e4-ab44-4df20bd133a4"> 
    <reference>EX0196276</reference> 
    <status>Submitted</status> 
    <sentat>2016-03-03T07:00:30.957Z</sentat> 
    <laststatusat>2016-03-03T07:00:30.957Z</laststatusat> 
    <submittedat>2016-03-03T07:00:30.957Z</submittedat> 
    <receivedat>2016-03-03T07:00:30.957Z</receivedat> 
    <type>SMS</type> 
- <to> 
    <phonenumber>34627176544</phonenumber> 
    </to> 
- <from> 
    <phonenumber>447944489977</phonenumber> 
    </from> 
    <summary>B3EB80710A470F42A782100303080000640000000000000...</summary> 
    <body id="8e835eda-d6d7-46e4-ab44-4df20bd133a4" uri="https://api.esendex.com/v1.0/messageheaders/8e835eda-d6d7-46e4-ab44-4df20bd133a4/body" /> 
    <direction>Inbound</direction> 
    <parts>1</parts> 
    <readat>2016-03-03T07:08:19.963Z</readat> 
    <readby>[email protected]</readby> 
    </messageheader> 
- <messageheader id="f9fd0867-7659-4042-a1d6-edd8699b19b3" uri="https://api.esendex.com/v1.0/messageheaders/f9fd0867-7659-4042-a1d6-edd8699b19b3"> 
    <reference>EX0196276</reference> 
    <status>Submitted</status> 
    <sentat>2016-03-03T06:01:33.007Z</sentat> 
    <laststatusat>2016-03-03T06:01:33.007Z</laststatusat> 
    <submittedat>2016-03-03T06:01:33.007Z</submittedat> 
    <receivedat>2016-03-03T06:01:33.007Z</receivedat> 
    <type>SMS</type> 
- <to> 
    <phonenumber>34627176544</phonenumber> 
    </to> 
- <from> 
    <phonenumber>447944489977</phonenumber> 
    </from> 
    <summary>B3EA80710A470F42A780100303070100640000000000000...</summary> 
    <body id="f9fd0867-7659-4042-a1d6-edd8699b19b3" uri="https://api.esendex.com/v1.0/messageheaders/f9fd0867-7659-4042-a1d6-edd8699b19b3/body" /> 
    <direction>Inbound</direction> 
    <parts>1</parts> 
    <readat>2016-03-03T07:08:05.497Z</readat> 
    <readby>[email protected]</readby> 
    </messageheader> 
    </messageheaders> 

Как я могу получить итоговое значение каждого из MessageHeader в messageheaders? Я пробовал много решений, найденных здесь, но он не работает.

XElement xml = XElement.Parse(response); 

var result = xml 
.Elements() 
.Select(s => new 
{ 
Summary = s.Element("summary").Value.ToString() 
}).ToList(); 

Этот код возвращает: Необработанное исключение типа «System.NullReferenceException» произошло в X4SmsReceiver.dll

Дополнительная информация: Ссылка на объект не указывает на экземпляр объекта.

Благодарим за помощь!

+0

его, потому что messageheaders имеет атрибут пространства имен. Попробуйте эту ссылку http://stackoverflow.com/questions/5939509/xdocument-and-linq-returns-null-if-the-element-has-xmlns-attribute –

ответ

1
XNamespace xns = "http://api.esendex.com/ns/"; 
     var data = xdoc.Element(xns + "messageheaders").Elements(xns+"messageheader").Select(x => new { Summary = x.Element(xns+"summary")}).ToList(); 

Попробуйте это работает

+1

Нет проблем. Я думаю, вы также узнали причину ошибки. Его из-за атрибута пространства имен. :) –

0

Вы можете использовать XSD.exe для разработки класса тэгов xml, а затем путем десериализации вы можете получить данные.

Смежные вопросы