我对Linq的XML很感兴趣。这个问题看起来很简单,但我似乎无法弄明白。希望有人可以帮助我。我得到这样的肥皂回应:
<customernumbers>
<customernumber>99999</customernumber>
<customernumber>27554</customernumber>
<customernumber>27555</customernumber>
</customernumbers>
我想在列表中解析这个XML文档。我使用这段代码:
var xml = XDocument.Load (@"c:\\mydata.xml");
var query =from e in xml.Elements("customernumbers")
select e.Value;
query.Dump();
5IEnumerable<String> (1 item)
999992755427555
Ofcource我想要的是分开的3个客户编号。不在1个字符串中。
非常感谢任何帮助。
//藩
答案 0 :(得分:2)
您的查询基本上是选择根节点<customernumbers>
的值,但XElement.Value
属性将返回与示例显示完全一致的所有子节点的值。您需要做的是改为在查询中选择每个子节点。
要使用完全相同的查询格式,您只需再添加一个Elements()
方法:
var query = from e in xml.Element("customernumbers").Elements()
select e.Value;
query
现在将包含3个String
个对象的集合,每个对象具有一个子节点的值。
如果您有不同名称的子元素,并且您只想要具有特定名称的元素的值,您也可以更改它:
var query = from e in xml.Element("customernumbers").Elements("customernumber")
select e.Value;
现在query
将包含名为“customernumber”的任何子元素的String
值的集合。
你可以进一步缩短这一点:
var query = from e in xml.Descendants("customernumber")
select e.Value;
这将做同样的事情。当您不知道XML的确切结构或者它非常复杂时,这会容易得多。缺点是它将选择任何子节点,孙子节点或任何其他名称为“customernumber”的节点,而不管XML树中的位置如何,因此如果您有多个具有<customernumber>
标记的不同节点,则不会想要选择,这种方法将无法正常工作。
答案 1 :(得分:1)
尝试此迭代子元素:
var query = from e in xml.Element("customernumbers").Elements("customernumber")
select e.Value;
答案 2 :(得分:0)
尝试,
List<string> customerNumbers = (from e in xmlelement.Elements("customernumber")
select e.Value).ToList<string>();