[英]Need help reading using LINQ to XML reading XML File
我有以下XML文件:
<DATASET>
<MESSAGE TYPE="TYPE1 ">
<FROM>
</FROM>
<EMAILRECIPIENTS>
<TO>
email@email.com
</TO>
</EMAILRECIPIENTS>
<SUBJECT>
tHIS IS A SUBJECT
</SUBJECT>
<BODY>
THIS is the bidoy
</BODY>
<ATTACHED>
<CONTENT> this is some content </CONTENT>
<CONTENT> this is some content </CONTENT>
<CONTENT> this is some content </CONTENT>
<CONTENT> this is some content </CONTENT>
<CONTENT> this is some content </CONTENT>
</ATTACHED>
</MESSAGE>
<MESSAGE TYPE="TYPE1 ">
<FROM>
</FROM>
<EMAILRECIPIENTS>
<TO>
email2@email.com
</TO>
</EMAILRECIPIENTS>
<SUBJECT>
this IS A SUBJECT
</SUBJECT>
<BODY>
THIS is the body
</BODY>
<ATTACHED>
<CONTENT> this is some content2 </CONTENT>
<CONTENT> this is some content2 </CONTENT>
<CONTENT> this is some content2 </CONTENT>
<CONTENT> this is some content2 </CONTENT>
<CONTENT> this is some content2 </CONTENT>
</ATTACHED>
</MESSAGE>
<MESSAGE TYPE="TYPE1 ">
<FROM>
</FROM>
<EMAILRECIPIENTS>
<TO>
email3@email.com
</TO>
</EMAILRECIPIENTS>
<SUBJECT>
tHIS IS A SUBJECT
</SUBJECT>
<BODY>
THIS is the body3
</BODY>
<ATTACHED>
<CONTENT> this is some content3 </CONTENT>
<CONTENT> this is some content3 </CONTENT>
<CONTENT> this is some content3 </CONTENT>
<CONTENT> this is some content3 </CONTENT>
<CONTENT> this is some content3 </CONTENT>
</ATTACHED>
</MESSAGE>
</DATASET>
現在,我嘗試編寫一個類來存儲此信息:
public class Dataset
{
public List<Message> Messages = new List<Message>();
}
public class Message
{
public string MessageType { get; set;}
public string From { get; set; }
public string Recipients { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
public string Attachmentfilename { get; set; }
public string Record { get; set; }
}
現在在我的主要我嘗試:
List<Message> messagelist = new List<Message(
(
from e in XDocument.Load(@"c:\XML\1.XML").Descendants("DATASET")
select new Message
{
MessageType = e.Element("MESSAGE").Attribute("TYPE").Value,
From = e.Element("MESSAGE").Element("FROM").Value,
Subject = e.Element("MESSAGE").Element("SUBJECT").Value,
Body = e.Element("MESSAGE").Element("BODY").Value,
AttachmentFileName = e.Element("MESSAGE").Element("ATTACHEMENT").Attribute("FILENAME").Value,
Record = e.Element("MESSAGE").Element("ATTACHEMENT").ELement("CONTENT").Value
}).ToList());
現在,我整理了自己獲得的最高價值,只是指出了自己的意思。 我要把這一切做錯嗎? 我只想將XML文件解析為列表或其他內容,然后根據這些值發送電子郵件。
我的想法是獲取可能包含一個或多個記錄的XML文件。 我的代碼無法正常工作,這主要是由於我並不真正知道自己在做什么,有關處理此問題的任何建議,或者使用LINQ to XML解析上述文件的方法都很棒。
我正在運行此程序,但似乎僅將第一條消息拉入列表,僅將內容的第一行拉入。
我想將整個XML文件拉到列表中,該XML文件可以包含多個消息。 可能是一個,可能有20。
我希望列表接受一個以上的消息,此代碼似乎僅拉第一個。
我希望將CONTENT輸出到一個文檔,其中每個文檔都是一個保留空格和每一行的行項目。
我要更改什么才能使其接受多於一行的內容和多於一條的消息?
如我的評論所建議,我寧願讓XmlSerializer來完成這項工作:
您的留言課
[XmlType("MESSAGE")]
public class Message
{
[XmlElement("FROM")]
public string From { get; set; }
[XmlArray("EMAILRECIPIENTS")]
[XmlArrayItem("TO")]
public List<string> Recipients { get; set; }
[XmlElement("SUBJECT")]
public string Subject { get; set; }
[XmlElement("BODY")]
public string Body { get; set; }
[XmlArray("ATTACHED")]
[XmlArrayItem("CONTENT")]
public List<string> Attachments { get; set; }
}
...並且使用XmlSerializer很簡單
var msgs = new XmlSerializer(typeof(List<Message>), new XmlRootAttribute("DATASET"));
using (var sr = new StreamReader(@"c:\XML\1.XML"))
{
var messages = msgs.Deserialize(sr);
}
首先,沒有結束</MESSAGE>
。 其次,您的<MESSAGE>
沒有<RECORD>
。 再次檢查您的XML。 您的代碼中沒有明顯的問題。
xml文檔具有一個名為EMAILRECIPIENTS
的標簽,但Dataset類沒有匹配的屬性-它僅具有Recipients
同樣在代碼中,您具有以下行
Record = e.ELement("CONTENT").Value
但在XML文件中,所有Content
標簽都是Attached
標簽的子元素
首先,讓我們清理您的代碼。 您有太多不必要的東西,並且引用了錯誤的值。 元素DATASET中沒有FROM,SUBJECT,CONTENT。 其中一些是MESSAGE的子級,而CONTENT是ATTACHED的子級,
List<Message> messagelist = XElement.Load(file)
.Descendants("MESSAGE")
.Select(e => new Message
{
From = e.Element("FROM").Value,
Subject = e.Element("SUBJECT").Value,
Record = string.Join("\n", e.Descendants("CONTENT")
.Select(c => c.Value)
.ToArray())
}).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.