XML子元素值以长字符串形式串联在一起

时间:2015-05-21 19:25:58

标签: c# xml

我有以下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串在一起。

我该如何解决这个问题?欢迎任何想法。

4 个答案:

答案 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;的值。节点