0

我有看起来像的 XML

<?xml version="1.0"?>
   <configuration>
      <TemplateMapper>
         <Template XML="Product.xml" XSLT="sheet.xslt" Keyword="Product" />
         <Template XML="Cart.xml" XSLT="Cartsheet.xslt" Keyword="Cart" />
      </TemplateMapper>
    </configuration>

当我将属性关键字的值作为“产品”传递时,我希望 LINQ 将 XML 和 XSLT 属性的值作为字符串和字符串的字典返回给我。

到目前为止,我已经尝试过:

               var Template="Product"
                var dictionary = (from el in xmlElement.Descendants("TemplateMapper") 
                              let xElement = el.Element("Template") 
                              where xElement != null && xElement.Attribute("Keyword").Value == Template 
                              select new
                                         {
                                             XML = el.Attribute("XML").Value, 
                                             XSLT= el.Attribute("XSLT").Value
                                         }).ToDictionary(pair => pair.XML, pair => pair.XSLT);

            KeyValuePair<string, string> templateValues = dictionary.FirstOrDefault();

它给出了一个错误“对象引用未设置为对象的实例”。谁能发现我做错了什么?帮助真的很感激。

4

2 回答 2

0

我会尝试以下:

var dictionary = (from t in xdoc.Root.Element("TemplateMapper").Elements("Template")
                  where (string)t.Attribute("Keyword") == Template
                  select new {
                      XML = (string)t.Attribute("XML"),
                      XSLT = (string)t.Attribute("XSLT")
                  }).ToDictionary(x => x.XML, x => x.XSLT);

(string)XAttribute没有找到属性时不会抛出异常,所以最好是XAttribute.Value.

于 2013-07-06T12:20:24.390 回答
0

用这个替换你的代码

           var Template="Product"
            var dictionary = (from el in xmlElement.Descendants("TemplateMapper") 
                          let xElement = el.Element("Template") 
                          where xElement != null && xElement.Attribute("Keyword").Value == Template 
                          select new
                                     {
                                         XML = xElement .Attribute("XML").Value, 
                                         XSLT= xElement .Attribute("XSLT").Value
                                     }).ToDictionary(pair => pair.XML, pair => pair.XSLT);

        KeyValuePair<string, string> templateValues = dictionary.FirstOrDefault();

您当前所在的元素是 xElement 而不是 el

于 2013-07-06T12:21:18.467 回答