将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
串在一起。
我该如何解决这个问题?
问题在于选择。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"节点的值。