簡體   English   中英

需要幫助,需要使用LINQ to XML閱讀XML文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM