如何在xdocument中查找元素并在其后读取下一个元素

时间:2014-07-23 16:54:22

标签: c# linq-to-xml

所以我有下一个xml文档:

<Items>
     <Item>
          <ID>123</ID>
          <Name>Super Item</Name>
          <Count>1</Count>
          <Price>45</Price>
     </Item>
     <Item>
          <ID>456</ID>
          <Name>not super Item</Name>
          <Count>10</Count>
          <Price>5</Price>
     </Item>
     <Item>
          <ID>789</ID>
          <Name>Simple Item</Name>
          <Count>6</Count>
          <Price>10</Price>
     </Item>
</Items>

那么如何通过ID找到所需的项目并阅读下一个值?提前谢谢。

代码:

  

XDocument doc = XDocument.Load(filePath);

foreach (var item in doc.Descendants("ID"))
{
   if ((string)item.Element("ID") == "789") 
   {

       How to read Name "Simple Item"?
       How to read Count "6"?
       How to read Price "10"?

   }
}

2 个答案:

答案 0 :(得分:0)

这取决于您在找到这些值时要执行的操作。以下是使用foreach循环查找具有指定ID的项目并返回其名称的一般方法:

private string GetItemName(string _id)
{
    XmlDocument xDoc = new XmlDocument();
    xDoc.Load("myXmlFile.xml");

    foreach (XmlNode item in xDoc.SelectNodes("/Items/Item"))
    {
        if (item.SelectSingleNode("ID").InnerText == _id)
        {
            // we found the item! Now what do we do?
            return item.SelectSingleNode("Name").InnerText;
        }
    }
    return null;
}

答案 1 :(得分:0)

根据您的要求,您可以格式化您的xml:

<Items>
  <Item id="123">
    <Name>Super Item</Name>
    <Count>1</Count>
    <Price>45</Price>
  </Item>
  <Item id="456">
    <Name>not super Item</Name>
    <Count>10</Count>
    <Price>5</Price>
  </Item>
  <Item id="789">
    <Name>Simple Item</Name>
    <Count>6</Count>
    <Price>10</Price>
  </Item>
</Items>

然后在代码中:

int yourId = 456;
XDocument doc = XDocument.Load("test.xml");
var result = from el in doc.Root.Elements("Item")
             where el.Attribute("id").Value == yourId.ToString()
             select el;

这里的id是一个属性。用于读取其值的两种方式:

//1º
foreach (var item in result.Elements())
{
    Console.WriteLine(item.Name + " = " + item.Value);
}

//2º - will print the element
Console.WriteLine(result);