在 foreach 循环中解析 XML

Posted

技术标签:

【中文标题】在 foreach 循环中解析 XML【英文标题】:Parsing XML in a foreach loop 【发布时间】:2014-06-18 23:19:36 【问题描述】:

我正在 Windows Phone 8 上制作应用程序。我正在努力解决的问题是解析 XML。 这里是 XML 文件:

 <ArrayOfThemeParkList xmlns="http://schemas.datacontract.org/2004/07/WCFServiceWebRole1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <ThemeParkList>
       <id>1</id>
       <name>Alton Towers</name>
    </ThemeParkList>
    <ThemeParkList>
       <id>2</id>
       <name>Thorpe Park</name>
    </ThemeParkList>
    <ThemeParkList>
       <id>3</id>
       <name>Chessington World Of Adventures</name>
    </ThemeParkList>
    <ThemeParkList>
       <id>4</id>
       <name>Blackpool Pleasure beach</name>
    </ThemeParkList>
 </ArrayOfThemeParkList>

尝试解析它的 c# 代码是:

void ThemeParksNames_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)

    //Now need to get that data and display it on the page
    //check for errors
    if (e.Error == null)
    
        //No errors have been passed now need to take this file and parse it 
        //Its in XML format
        XDocument xdox = XDocument.Parse(e.Result);
        //need a list for them to be put in to
        List<ThemeParksClass> ParkList = new List<ThemeParksClass>();
        //Now need to get every element and add it to the list
        foreach (XElement item in xdox.Root.Elements("ThemeParkList"))
        
            ThemeParksClass content = new ThemeParksClass();
            content.ID = Convert.ToInt32(item.Element("id").Value);
            content.ThemeParkName = item.Element("name").Value.ToString();
            ParkList.Add(content);
        
        parkList.ItemsSource = ParkList.ToList();
    
    else
    
        //There an Error
    

现在,当使用断点时,它会到达 for each 循环,但根本不会运行,只是继续前进。我猜我的 for each 循环设置错误。

非常感谢。

【问题讨论】:

可能尝试将您的 foreach 更改为:foreach (XElement element in xdox.Descendants("ThemeParkList")) 【参考方案1】:

您的 ThemeParkList 元素位于命名空间 http://schemas.datacontract.org/2004/07/WCFServiceWebRole1 - 您需要进行相应调整:

XNamespace ns = "http://schemas.datacontract.org/2004/07/WCFServiceWebRole1";
foreach (XElement item in xdox.Descendants(ns + "ThemeParkList"))

您需要以相同的方式处理其他元素。

【讨论】:

以上是关于在 foreach 循环中解析 XML的主要内容,如果未能解决你的问题,请参考以下文章

如何在 forEach 循环节点中使用 Promise?

优化mysql查询——foreach循环

深入解析php中的foreach问题

c# foreach 没有在循环中获取下一个 XElement 名称

forEach() 循环的 Dart/Flutter 批处理?

等待 forEach 循环