使用Linq从xml获取属性

时间:2017-06-21 16:05:07

标签: c# xml linq linq-to-xml

我有一个xml文档,我想从

获取属性

这是XML:

<Translations>
   <Product Name="Room" ID="16">
      <Terms>
         <Term Generic="Brand" Product="Sub Category" />
         <Term Generic="Range" Product="Brand" />
      </Terms>
   </Product>
   <Product Name="House"" ID="29">
      <Terms>
          <Term Generic="Category" Product="Product Brand" />
          <Term Generic="Brand" Product="Category Description" />
          <Term Generic="Range" Product="Group Description" />
          <Term Generic="Product" Product="Product Description" />
      </Terms>
   </Product>
</Translations>

这是我目前的Linq查询

public static string clsTranslationTesting(string GenericTerm, int ProductID)
{
    const string xmlFilePath = "C:\\Dev\\XMLTrial\\XMLFile1.xml";
    var xmlDocument =  XDocument.Load(xmlFilePath);
    var genericValue =
        from gen in xmlDocument.Descendants("Product")
        where gen.Attribute("ID").Value == ProductID.ToString()
        select gen.Value.ToString();
}

我遇到的错误是当我将数据传递给方法时,该方法成功地将xml从文件加载到xmlDocument变量。但是,当它执行查询时,它返回一个值null。我想获取ID值。

1 个答案:

答案 0 :(得分:0)

我对你的问题有点遗失,但这是我的尝试。

首先,您需要改变&#34;客户&#34;到&#34;产品&#34;。您的XML不包含单词&#34; Customer&#34;所以我认为你有一个错字。

我不确切地知道你想从查询中返回什么(我假设只是整个匹配的节点?)。试试这个:

var genericValue = xmlDocument.Descendants("Product")
                       .FirstOrDefault(x => x.Attribute("ID").Value == "16");

我做了一个小提琴here,表明它在行动