LINQ到XML,得到元素具有特定属性的

问题描述:

我有这样的XML,LINQ到XML,得到元素具有特定属性的

<MM> 
    <Bank> 
     <Result> 
      <url>http://192.168.1.12/pay/api/abc</url> 
      <param name="type">FUND</param> 
      <param name="tid">175219</param> 
      <param name="ticket">DiZfWMQxL5Qfasfsdfsdfsqweqwe</param> 
      <param name="stage">1</param> 
     <Result> 
    <Bank> 
</MM> 

我知道怎么去为url元素的值。

Dim qryurl = From c In doc.Descendants("Result") _ 
      Select c.Element("url").Value 

如何从XML中指定param标记值?

+0

我已经编辑你的问题,我希望我并没有改变它的意义。请将此用作改善未来问题的指导。 – Jodrell

from x in c.Elements("param") 
select new { 
       type = x.Select(y => y.Attribute("name").Value == "type").Value, 
       tid = x.Select(y => y.Attribute("name").Value == "tid").Value, 
       ticket = x.Select(y => y.Attribute("name").Value == "ticket").Value, 
       stage = x.Select(y => y.Attribute("name").Value == "stage").Value, 

      } 

可能有一些语法错误。但这是获取价值的逻辑。例如,您可以检查HERE关于此主题。

+0

我刚刚尝试了针对提供的XML的答案,但没有奏效。你可能想自己检查一下。 – Enigmativity

我想看看做这种方式:

Dim getParam As Func(Of XElement, String, String) = 
    Function (e, t) 
     Return e _ 
      .Elements("param") _ 
      .Where(Function (x) x.Attribute("name") = t) _ 
      .Select(Function (x) x.Value) _ 
      .FirstOrDefault() 
    End Function 

Dim Query = _ 
    From c In doc.Descendants("Result") _ 
    Select New With 
    { 
     .URL = c.Element("url").Value, 
     .type = getParam(c, "type"), 
     .tid = getParam(c, "tid"), 
     .ticket = getParam(c, "ticket"), 
     .stage = getParam(c, "stage") 
    } 

您当然可以直接扩大getParam功能到查询,但是这将使它非常冗长。使用Func当然会缩短它。

我的结果给上面的代码和示例XML是:

Query Result