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
标记值?
答
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是:
我已经编辑你的问题,我希望我并没有改变它的意义。请将此用作改善未来问题的指导。 – Jodrell