如何解析多个不唯一的XML元素

时间:2012-09-12 13:53:06

标签: xml linq parsing

我对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个字符串中。

非常感谢任何帮助。

//藩

3 个答案:

答案 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>();