我有以下XML:
<Items>
<textBoxCenterName>Denver Dispatch</textBoxCenterName>
<textBoxContactFirstName>Eric</textBoxContactFirstName>
<servicedUnits>
<unit>CO-ADX (Adams County)</unit>
<unit>CO-AFQ (Air Force Academy)</unit>
<unit>CO-ALDS (CSFS-Alamosa District)</unit>
<unit>CO-ALX (Alamosa County)</unit>
</servicedUnits>
</Items>
我使用以下代码将servicedUnits
作为listBox项目提取:
XElement element = XElement.Load("FCAT-Settings.xml");
foreach (XElement item in element.Elements("servicedUnits"))
listBoxServicedUnits.Items.Add(item.Value);
这些项目是作为一个长串连接进来的,如下所示:
CO-ADX (Adams County)CO-AFQ (Air Force Academy)CO-ALDS (CSFS-Alamosa District)CO-ALX (Alamosa County)
所以我最终得到了列表框中的一个项目,所有这些servicedUnits
串在一起。
我该如何解决这个问题?欢迎任何想法。
答案 0 :(得分:1)
问题在于选择。 element.Elements("servicedUnits")
返回servicedUnits
元素列表(XML中只有1个),您想要的是INSIDE元素列表,例如element.Elements("servicedUnits").Elements()
。
答案 1 :(得分:0)
您可以尝试获取子节点:
foreach (XElement item in element.Elements("servicedUnits").Elements())
答案 2 :(得分:0)
您正在尝试迭代单个元素(servicedUnits
),而不是迭代您想要的unit
元素集合。您当前实现的输出只是为您提供Value
元素的总servicedUnits
,这是其每个子元素的值。
要获得您看似打算拥有的内容,您需要迭代unit
元素,如下所示:
foreach(XElement item in element.Element("servicedUnits").Elements("unit"))
{
//add to listbox, whatever
}
此示例实现假设您只有一个servicedUnits
元素,FYI。
答案 3 :(得分:0)
一种简单的方法是在Descendents
上使用XDocument
方法:
var xdoc = XDocument.Load(@"FCAT-Settings.xml");
var units = xdoc
.Descendants("servicedUnits")
.SelectMany(u => u.Descendants("unit").Select(x => x.Value));
foreach (var unit in units)
listBoxServicedUnits.Items.Add(unit);
这也确保您只能获得&#34;单位&#34;的值。节点