我有以下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输出到一个文档,其中每个文档都是一个保留空格和每行的行项目。
我可以更改哪些内容使其接受多行内容和多条消息?
答案 0 :(得分:1)
正如我在评论中所建议的那样,我宁愿让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);
}
答案 1 :(得分:0)
首先,没有结束</MESSAGE>
。
其次,您的<MESSAGE>
没有<RECORD>
。
再次检查您的XML。您的代码中没有明显的问题。
答案 2 :(得分:0)
xml文档有一个名为EMAILRECIPIENTS
的标记但数据集类没有匹配的属性 - 它只有Recipients
同样在您的代码中,您有以下行
Record = e.ELement("CONTENT").Value
但在XML文件中,所有Content
代码都是Attached
代码的子代
答案 3 :(得分:0)
首先,让我们清理您的代码。你有太多不必要的东西,并且引用了错误的值。元素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();