Vadivel Murthy Ответов: 1

Как сделать итерацию дочерних узлов, содержащих более одного значения


<message>
<messagetype>plantext</messgaetype>
<sender>donotreply@invesco.com</sender> 
<PortfolioManagerName>Taylor, Jeffrey</PortfolioManagerName> 
<FirstName>Jeffrey</FirstName> 
<Torecipients >
<torecipient>Jeffrey_Taylor@invescoperpetual.co.uk</torecipient>
</Torecipients >
<CCrecipients >
<ccrecipient>vadivel.murthy@invesco.com</ccrecipient>
</CCrecipients >
<subject>Proxy Vote Due Report </subject> 
<body></body> 
<Attachments >
<attachment>\\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\Reports\VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41-29.pdf</attachment>
<attachment>\\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\Reports\VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41-29.xlsx</attachment>
<attachment>\\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\Reports\VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41-29.html</attachment>
</Attachments >
</message>



из выше XML-файл, я хочу сделать вам attacments стоимость одного б один. пожалуйста кто нибудь предложите какие нибудь идеи

Что я уже пробовал:

string refile = null;
DirectoryInfo dir = new DirectoryInfo(folderpath);
FileInfo[] resultfile = dir.GetFiles("*.xml");
foreach (FileInfo file in resultfile)
{
   if(file.Exists)
    {
        refile = file.FullName;
        XmlDocument doc = new XmlDocument();
        doc.Load(refile);
        XmlNodeList elemList = doc.GetElementsByTagName("Message");
        for (int i = 0; i <= elemList.Count - 1; i++)
        {
            string fullname = elemList[i].ChildNodes.Item(2).InnerText.Trim();
            string firstname = elemList[i].ChildNodes.Item(3).InnerText.Trim();
            string toaddress = elemList[i].ChildNodes.Item(4).InnerText.Trim();
            string ccaddress = elemList[i].ChildNodes.Item(5).InnerText.Trim();
            string subject = elemList[i].ChildNodes.Item(6).InnerText.Trim();
            string attachments = elemList[i].ChildNodes.Item(8).InnerText.Trim();

        }
    }

}


в узлах вложения я получаю все три внутренних текстовых значения в одной строке, я хочу получить одно за другим и сохранить в строке

1 Ответов

Рейтинг:
6

Maciej Los

Вадивел Мурти[^] писанное:
я хочу получить один за другим и хранить в строке


Все, что вам нужно сделать, это сделать цикл через коллекцию вложений.

Реализация для Класс XDocument[^]:
XDocument xdoc = XDocument.Parse(xcontent);
var messages = xdoc.Descendants("message");
foreach(var msg in messages)
{
	Console.WriteLine("full name: {0}", msg.Element("PortfolioManagerName").Value);
	Console.WriteLine("first name: {0}", msg.Element("FirstName").Value);
	Console.WriteLine("subject: {0}", msg.Element("subject").Value);
	var attachments = msg.Element("Attachments").Descendants("attachment");
	foreach(var att in attachments)
	{
		Console.WriteLine("attachment: {0}", att.Value);
	}
}

возвращается:
full name: Taylor, Jeffrey
first name: Jeffrey
subject: Proxy Vote Due Report 
attachment: \\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\Reports\VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41-29.pdf
attachment: \\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\Reports\VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41-29.xlsx
attachment: \\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\Reports\VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41-29.html


Karthik_Mahalingam

5

Maciej Los

Спасибо, Картик.

Vadivel Murthy

спасибо Мацей Лос

Maciej Los

Всегда пожалуйста ;)