如何迭代包含多个值的子节点 [英] How to do iteration of child nodes which contain more than one value
本文介绍了如何迭代包含多个值的子节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
<消息>
< 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();
}
}
}
在附件节点我得到单行中的所有三个内部文本值,我想逐个得到并存储在字符串
解决方案
Vadivel Murthy [ ^ ]写道:我想要逐个获取并存储在字符串中
所有你要做的就是遍历附件集合。
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屋!
查看全文