遍历c#中的XML

时间:2014-02-20 00:15:20

标签: c# xml linq-to-xml

我有一个xml如下,

<product>
  <ProductId>3</ProductId>
  <ProductName>Voice Recognition</ProductName>
</product>
<product>
  <ProductId>5</ProductId>
  <ProductName>TravelExpert Settings</ProductName>
  <ProductAttribute>
    <Name>AllowbookIncompleteTraveller</Name>
    <Description>false</Description>
  </ProductAttribute>
  <ProductAttribute>
    <Name>CreateTravs</Name>
    <Description>false</Description>
  </ProductAttribute>
  <ProductAttribute>
    <Name>MultiPax</Name>
    <Description>false</Description>
  </ProductAttribute>
  <ProductAttribute>
    <Name>Hotel</Name>
    <Description>false</Description>
  </ProductAttribute>
  <ProductAttribute>
    <Name>Profile</Name>
    <Description>true</Description>
  </ProductAttribute>
  <ProductAttribute>
    <Name>Air</Name>
    <Description>false</Description>
  </ProductAttribute>
  <ProductAttribute>
    <Name>TicketDelivery</Name>
    <Description>false</Description>
  </ProductAttribute>
  <ProductAttribute>
    <Name>Exchange</Name>
    <Description>false</Description>
  </ProductAttribute>
  <ProductAttribute>
    <Name>Car</Name>
    <Description>false</Description>
  </ProductAttribute>
  <ProductAttribute>
    <Name>Itinerary</Name>
    <Description>false</Description>
  </ProductAttribute>
  <ProductAttribute>
    <Name>StoredFare</Name>
    <Description>false</Description>
  </ProductAttribute>
</product>

我需要遍历Product with ProductName =“TravelExpert Settings”,我需要ProductAttribute的值为Name =“Profile”。值是真的。元素的类型是System.Xml.Linq.XElement。

我可以请一点帮忙吗?如果您需要进一步说明,请与我们联系。

非常欣赏它。

谢谢!

1 个答案:

答案 0 :(得分:3)

  1. 您的XML无效。 XML文档不能包含多个根元素。我认为你的文件看起来像那样:

    <products>
      <product>
        <ProductId>3</ProductId>
        <ProductName>Voice Recognition</ProductName>
      </product>
      <product>
        <ProductId>5</ProductId>
        <ProductName>TravelExpert Settings</ProductName>
        <ProductAttribute>
          <Name>AllowbookIncompleteTraveller</Name>
          <Description>false</Description>
        </ProductAttribute>
        <!-- (...) -->
      </product>
    </products>
    
  2. 您的查询应如下所示:

    var xDoc = XDocument.Load("Input.xml");
    
    var valueElement = xDoc.Root
                           .Elements("product")
                           .First(p => (string)p.Element("ProductName") == "TravelExpert Settings")
                           .Elements("ProductAttribute")
                           .First(pa => (string)pa.Element("Name") == "Profile")
                           .Element("Description");
    
    var value = (bool)valueElement;