从c#获取xml的值

时间:2014-09-07 07:44:31

标签: c# xml linq

这个问题一定很容易,但我遇到了问题, 这是我无法处理的。 无论我尝试什么,我都无法使用linq解析此xml并获取xml值。

错误是" System.Collections.Generic.IEnumerable'不包含'元素'的定义没有扩展方法'元素'接受类型为'System.Collections.Generic.IEnumerable'的第一个参数。可以找到(你错过了使用指令或汇编引用吗?)"

我想找到具有具体attribute.value的子元素的Xelement attribute.value。 我怎样才能获得attribute.value?

感谢

XML

 <submitInfo>
    <setting name="file1" file ="example3.c" info ="open it!" serializeAs="String">
      <add name="file11" program="example2.c" />
      <add name="file12" value="example1.c" />
      <value />
<setting name="file2" file ="example23.c" info ="open it!" serializeAs="String">
      <add name="file21" program="example22.c" />
      <add name="file22" value="example21.c" />
      <value />

    </setting>
  </submitInfo> 

代码:

    var title1 = from q in doc.Element("content").Element("submitInfo").Elements("setting")
                 select q;

    foreach (var t1 in title1)
    {
          Console.WriteLine(
              String.Format( 
                 name = title1.Element("name").Value,
                 file= title1.Element("file").Value,
                 info= title1.Attribute("info").Value));
    }

    //get setting info
    var title = from p in doc.Element("content").Element("submitInfo").Element("setting").Elements("add")
                select p;
    foreach (var t1 in title)
    {
        Console.WriteLine(
              String.Format(                      
                name =  title1.Element("name").Value,
                value = title1.Element("program").Value));

1 个答案:

答案 0 :(得分:2)

这是一个问题:

 name = title1.Element("name").Value,
 file= title1.Element("file").Value,
 info= title1.Attribute("info").Value));

查看您的XML:

<setting name="file1" file ="example3.c" info ="open it!" serializeAs="String">
  <add name="file11" program="example2.c" />
  <add name="file12" value="example1.c" />
  <value />
</setting>

它没有namefile元素 - 这些属性。所以你需要这样的东西:

string name = t1.Attribute("name");
string file = t1.Attribute("file");
string info = t1.Attribute("info");

请注意,这是使用t1,而不是title1 - 否则您要求查询中的数据,而不是查询的特定元素。

此外,您真的不需要查询表达式。只需使用:

var title1 = doc.Element("content").Element("submitInfo").Elements("setting"); 

另一个问题是,您目前正在调用string.Format,其中包含三项作业。我怀疑你真的想要:

Console.WriteLine("{0} {1} {2}", t1.Attribute("name"),
                  t1.Attribute("file"), t1.Attribute("info"));