将XML子值串在一起作为长字符串传入

本文关键字:字符串 在一起 XML | 更新日期: 2023-09-27 17:50:16

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

我该如何解决这个问题?

将XML子值串在一起作为长字符串传入

问题在于选择。element.Elements("servicedUnits")返回servicedUnits元素的列表(XML中只有1个),您想要的是该元素内部的元素列表,例如element.Elements("servicedUnits").Elements()

您可以尝试获取子节点:

    foreach (XElement item in element.Elements("servicedUnits").Elements())

您正在尝试迭代单个元素(servicedUnits),而不是迭代您打算迭代的unit元素集合。当前实现的输出只是为您提供servicedUnits元素的总Value,这是它的每个子元素的值。

要得到您想要的结果,您需要遍历unit元素,如下所示:

foreach(XElement item in element.Element("servicedUnits").Elements("unit"))
{
    //add to listbox, whatever
}

这个示例实现假设您只有一个servicedUnits元素,供参考。

一个简单的方法是在XDocument上使用Descendents方法:

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

这也确保您将只获得"unit"节点的值。