如何迭代包含多个值的子节点 [英] How to do iteration of child nodes which contain more than one value

查看:59
本文介绍了如何迭代包含多个值的子节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

<消息> 
< 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>代理投票到期报告< / subject>
< body>< / body>
<附件>
将附件> \\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\Reports\VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41- 29.pdf< /附件>
将附件> \\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\Reports\VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41- 29.xlsx< /附件>
将附件> \\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\Reports\VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41- 29.html< /附件>
< / Attachments>
< / message>







来自上面的xml,我希望得到附件价值一b一。请一些人建议任何想法



我尝试过:



 string refile = null; 
DirectoryInfo dir = new DirectoryInfo(folderpath);
FileInfo [] resultfile = dir.GetFiles(*。xml);
foreach(resultfile中的FileInfo文件)
{
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();

}
}

}





在附件节点我得到单行中的所有三个内部文本值,我想逐个得到并存储在字符串

解决方案

我想要逐个获取并存储在字符串中





所有你要做的就是遍历附件集合。



XDocument的实现类 [ ^ ]:

 XDocument xdoc = XDocument.Parse(xcontent); 
var messages = xdoc.Descendants(message);
foreach(消息中的var msg)
{
Console.WriteLine(全名:{0},msg.Element(PortfolioManagerName)。Value);
Console.WriteLine(名字:{0},msg.Element(FirstName)。Value);
Console.WriteLine(subject:{0},msg.Element(subject)。Value);
var attachments = msg.Element(Attachments)。后代(附件);
foreach(附件中的var att)
{
Console.WriteLine(attachment:{0},att.Value);
}
}



返回:

全名:Taylor,Jeffrey 
首先名称:杰弗里
主题:委托投票由于报告
附件:\\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\Reports\\ \\VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41-29.pdf
附件:\\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\Reports \VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41-29.xlsx
附件:\\corp\dfsroot\global\Apps\GApps\GAppsdev\ProxyVoting\ Reports\VDR\Run_2018_01_08_19_41\Taylor_Jeffrey_01-08-2018_19-41-29.html


<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>




from the above xml, i want do get attacments value one b one. please some one suggest any ideas

What I have tried:

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();

        }
    }

}



in the attachment nodes i am getting all the three inner text value in single row, i want to get one by one and store in string

解决方案

Vadivel Murthy[^] wrote:

i want to get one by one and store in string



All you have to do is to loop through the collection of attachments.

Implementation for XDocument class[^]:

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);
	}
}


returns:

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


这篇关于如何迭代包含多个值的子节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆