如何从(我认为)没有标准格式的XML中检索值?

时间:2012-10-05 11:54:21

标签: c# xml linq

我似乎无法找到有同样问题的文章。

我有一个像这样的XML文件:

<user id="" name="" termsofuse="http://boardgamegeek.com/xmlapi/termsofuse">
<firstname value="" /> 
<lastname value="" /> 
<avatarlink value="N/A" /> 
<yearregistered value="" /> 
<lastlogin value="2012-10-04" /> 
<stateorprovince value="" /> 
<country value="" /> 
<webaddress value="" /> 
<xboxaccount value="" /> 
<wiiaccount value="" /> 
<psnaccount value="" /> 
<battlenetaccount value="" /> 
<steamaccount value="" /> 
<traderating value="363" /> 
</user>

我使用以下代码提取数据:

static string QueryTheData(XDocument doc)
{
  var data = from item in doc.Descendants("user")
             select new
             {
               avatarlink = item.Element("avatarlink").Value,
               lastlogin = item.Element("lastlogin").Value,
             };
  var t = "";
  foreach (var p in data)
    t += p.ToString();
  return t;
}

但我返回的值为null。我想知道是不是因为XML文件开始了:

<user id="" name="" termsofuse="http://boardgamegeek.com/xmlapi/termsofuse">

在所有示例中,我发现XML的开头是这样的:

<user> ... etc

如何以这种格式阅读这些值?

2 个答案:

答案 0 :(得分:3)

您想获取属性value的值。试试这个

avatarlink = item.Element("avatarlink").Attribute("value").Value

但我会这样走

var list = doc.Descendants("user")
        .Select(u=>u.Elements().ToDictionary(e=>e.Name.LocalName,e=>e.Attribute("value").Value))
        .ToList();

其中最终列表的每个项目都包含元素及其值的字典

var lastlogin = list[0]["lastlogin"];

答案 1 :(得分:2)

Value属性正在读取节点的值,您可能正在寻找类似的东西:

(string)item.Element("avatarlink").Attribute("value")