2

我对 XML to Linq 很陌生。这个问题看起来很简单,但我似乎无法弄清楚。希望有人可以帮助我。我得到这样的肥皂响应:

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

任何帮助将非常感激。

//潘

4

3 回答 3

2

您的查询基本上是选择 root node 的值<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将包含String名称为“customernumber”的任何子元素的值的集合。

您可以进一步缩短它:

var query = from e in xml.Descendants("customernumber")
            select e.Value;

这将做同样的事情。当您不知道 XML 的确切结构或者它非常复杂时,这会容易得多。缺点是它会选择任何子节点、孙子节点或任何其他名称为“customernumber”的节点,而不管 XML 树中的位置如何,因此如果您有多个不同的节点带有<customernumber>您不想选择的标签,则此方法将无法正常工作。

于 2012-09-12T15:22:29.867 回答
1

试试这个来迭代子元素:

    var query = from e in xml.Element("customernumbers").Elements("customernumber")
                select e.Value;
于 2012-09-12T14:41:55.043 回答
0

尝试,

List<string> customerNumbers = (from e in xmlelement.Elements("customernumber")
                    select e.Value).ToList<string>();
于 2012-09-12T16:23:59.127 回答