2
    <maintag>
           <CENTER>
              <ID>11</ID>
              <CENTER>333</CENTER>
           </CENTER>
           <PRODUCTID>100</PRODUCTID>
           <LastNum>0900</LastNum>

    </maintag>

我有上面的 XML,其中父节点及其子节点之一(即 CENTER)具有相同的标记名称。我知道我可以在主标签的索引 0 处分多个步骤解析它,然后 CENTER 标签的索引 0 将给出 ID,中心标签的索引 1 将给出 CENTER 的值 333 等。但是有没有办法我可以直接得到ID 和 CENTER (11 , 333 ) 的值。

4

3 回答 3

1
class Program
  {
    static void Main(string[] args)
    {
      string xml = @"<maintag>
           <CENTER>
              <ID>11</ID>
              <CENTER>333</CENTER>
           </CENTER>
           <PRODUCTID>100</PRODUCTID>
           <LastNum>0900</LastNum>
    </maintag>";

      XmlDocument xd = new XmlDocument();
      xd.LoadXml(xml);

      string center = xd.DocumentElement.SelectSingleNode("CENTER/CENTER").InnerText;
      string id = xd.DocumentElement.SelectSingleNode("CENTER/ID").InnerText;


    }
于 2013-11-14T13:55:40.970 回答
0

我在这里给你一个非常笼统的答案:

 var elementsWithChildrenOfSameName = 
    xmlDoc.Root.Elements()
     .Where(ele => ele.Elements().Any(t => t.Name == ele.Name)).ToList();

从那里你可以很容易地得到你想要的数据。

或以集成查询方式:

 var elementsWithChildrenOfSameName = 
        from parent in xmlDoc.Root.Elements()
        from child in parent.Elements()
        where child.Name == parent.Name
        select parent; // Or maybe select the id's?
于 2013-11-14T13:56:32.270 回答
0

LinqToXml XDocument 查询:

XDocument doc = XDocument.Parse(x);
var res = doc.Descendants("CENTER")
             .Where(el => el.Elements("ID").Count() > 0 && el.Elements("CENTER").Count() > 0)
             .Select(el => new { 
                                 id = el.Element("ID").Value,
                                 center = el.Element("CENTER").Value 
                               })
             .ToList();

选择所有 CENTER 标记,这些标记在子项中同时具有 ID 和 CENTER 标记,并将它们的 ID 和 CENTER 值放入新的结果集合中。

于 2013-11-14T14:03:22.677 回答