我有一个服务用户的集合,我想遍历ServiceUsers并从ServiceUser中提取值,(ID,USER_NAME,UN_ID,IP,NAME)
<ServiceUsers xmlns="">
<ServiceUser>
<ID>280334</ID>
<USER_NAME>YVELAMGAMOIYENET12:206322102</USER_NAME>
<UN_ID>731937</UN_ID>
<IP>91.151.136.178</IP>
<NAME>?????????????????????: 123456</NAME>
</ServiceUser>
<ServiceUser>
<ID>266070</ID>
<USER_NAME>ACHIBALANCE:206322102</USER_NAME>
<UN_ID>731937</UN_ID>
<IP>185.139.56.37</IP>
<NAME>123456</NAME>
</ServiceUser>
</ServiceUsers>
我的代码看起来像这样,但我得到空点异常。
XDocument doc = XDocument.Parse(xml)
List<XElement> xElementList = doc.Element("ServiceUsers").Descendants().ToList();
foreach (XElement element in xElementList)
{
string TEST= element.Element("Name").Value;
comboBoxServiceUser.Items.Add(element.Element("Name").Value);
}
4条答案
按热度按时间5jdjgkvh1#
我使用XmlSerializer.Deserialize Method中的示例作为下面读取所提供xml的代码片段的基础。
cqoc49vn2#
我认为问题的根源是你的尾随“s”,简而言之,你迭代了ServiceUser而不是ServiceUsers
总之这条贯穿细:
e0bqpujr3#
正如雷劈所说:XML是区分大小写的。下一个问题是
.Descendants()
返回所有的后代节点,嵌套的节点,等等,在这个例子中是12个节点。所以即使你修复了一个“错字”,NullPointerException也会发生。以下是您的固定代码:
ni65a41a4#
使用
doc.Element("ServiceUsers").Elements()
获取<ServiceUser>
元素,然后在嵌套循环中遍历这些元素的子值。印刷品:
注意:
Elements()
会取得(直接)子元素,而Descendants()
会传回所有子代。使用Elements()
可以让您更好地控制,并让您取得依使用者分组的属性。您还可以获得一个特定的属性,如
serviceUser.Element("USER_NAME").Value
。请注意,标记名称是区分大小写的!