查询XML以提取一条记录并将数据绑定到各个文本块

时间:2011-12-13 11:35:18

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

我是新来的,所以请耐心等待。使用C#和LINQ,我试图从XML文件中提取一条记录,我想将它的元素和属性绑定到单个文本块。

假设我有一个名为Test.xml的xml文件:

<Data>
  <Test id=1>
     <Text>"First Record"</Text>
  </Test>
  <Test id=2>
     <Text>"Second Record"</Text>
  </Test>
<Data>

我想传入一个id的变量,这样我就可以提取记录信息并将其绑定到单个文本块

var r = 2  // just hardcoding for the example

XDocument d = XDocument.Load("Test.xml");

var q = from t in d.Descendants("Test")
where t.Attribute("id").Value == r  
select new
{
   id = t.Attribute("id").Value,
   text = t.Element("text").Value
}

现在我想将“id”和“text”绑定到不同的文本块

idTextBlock.Text = id
textTextBlock.Text = text

这当然会引发有关id和文本的“各种错误”“在此上下文中不存在”。我看到的所有示例都只是将输出集中在控制台上的一个字符串中,这对我没有帮助。我真的很新(第二周)编程,所以我可能做错了。任何援助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

我已经更正了您提供的XML,以便在下面进行查询。

int r = 2;
XDocument xdoc = XDocument.Load("Test.xml");            
string id = r.ToString();
string text = xdoc.Descendants("Test")
                  .Where(d => d.Attribute("id").Value == id)                
                  .Descendants("Text")
                  .Select(n => n.Value)
                  .SingleOrDefault(); 

更正的XML:(已关闭的Data代码,用双引号括起来的id属性值)

<Data>   
  <Test id="1"> 
     <Text>"First Record"</Text>   
  </Test>   
  <Test id="2">
      <Text>"Second Record"</Text>   
  </Test> 
</Data>