通过指定属性值使用linq查询嵌套的xml

时间:2015-04-08 04:12:18

标签: c# linq linq-to-xml

MY xml架构如下:

  <TestSuite>

  <TestCase Name="Connect">
    <Input>
      <AppName>XYZ</AppName>
      <UserId>Vishwas</UserId>    
    </Input>
  </TestCase>

  <TestCase Name="Create">
    <Input>
      <FileName>abc</AppName>    
    </Input>
    <OutPut>
      <Filesize></Filesize>
  </TestCase>  

 <TestSuite>

如何编写LINQ to XML查询以检索UserId的值,该值存在于测试用例名称和#34; Connect&#34;中,我是linq的新手,希望得到您的帮助并提前感谢。

1 个答案:

答案 0 :(得分:0)

首先,你的XML格式不正确,我已经在代码中更正了,相应地更改了它。

你可以这样做:TestCaseUserId这样: -

var xdoc = XDocument.Parse(@"<TestSuite><TestCase Name=""Connect""><Input>
 <AppName>XYZ</AppName><UserId>Vishwas</UserId></Input></TestCase>
 <TestCase Name=""Create""><Input><FileName>abc</FileName></Input><OutPut>
 <Filesize></Filesize></OutPut></TestCase></TestSuite>");

string userid = (xdoc.Descendants("TestCase")
                     .Where(x => (string)x.Attribute("Name") == "Connect")
                     .Select(x => (string)x.Element("Input").Element("UserId")))
                     .FirstOrDefault();

或者您可以选择Input节点,然后您可以过滤并选择以下项目: -

string userid = (from x in xdoc.Descendants("Input")
                 where (string)x.Parent.Attribute("Name") == "Connect"
                 select (string)x.Element("UserId")).FirstOrDefault();