2011-12-13 35 views
2

我是新來的,所以請耐心等待。使用C#和LINQ,我試圖從XML文件中提取一條記錄,並且想要將它的元素和屬性綁定到單個文本塊。查詢XML以提取一條記錄並將數據綁定到單個文本塊

可以說我有一個名爲本的test.xml xml文件:

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

我想在id的變量傳遞這樣我就可以拉出來的記錄信息,並將其綁定到單獨的TextBlocks

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」 和 「文本」,以indivual文本塊

idTextBlock.Text = id 
textTextBlock.Text = text 

氏當然會拋出關於id和文本「在這種情況下不存在」的各種錯誤。我所見過的所有例子只是簡單地將輸出集中到控制檯上的單個字符串,這對我沒有幫助。我真的很新(第二週)編程,所以我可能會完全錯誤。任何援助將不勝感激。謝謝!

+0

(逢Data標籤,id屬性包含在雙引號值),我想q.id和綁定時q.text應該正常工作。 –

+0

現在我收到此錯誤:\t'System.Collections.Generic.IEnumerable '不包含'id'的定義,也沒有接受類型爲'System.Collections.Generic'的第一個參數的擴展方法'id' .IEnumerable '可以找到(你是否缺少using指令或程序集引用?) – evilsushi

+0

使用var q =(從d.Descendants(「Test」)中的t 其中t.Attribute(「id」 )。價值== - [R 選擇新 { ID = t.Attribute( 「ID」)值, 文本= t.Element( 「文本」)值 。})DefaultIfEmpty()FirstOrDefault()。; –

回答

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> 
    <Test id="1"> 
    <Text>"First Record"</Text> 
    </Test> 
    <Test id="2"> 
     <Text>"Second Record"</Text> 
    </Test> 
</Data> 
+0

嗯......現在我得到一個「序列不包含元素」的錯誤。它直到它跑完才顯示出來。 – evilsushi

+0

您是否使用過我提供的XML並且沒有任何更改的查詢?通過設計LINQ'Single()'會拋出這樣的異常,但是對於給定的數據它應該返回一個條目,可以考慮使用'SingleOrDefault()' – sll

+0

查看更新後的LINQ查詢,它返回''SecondRecord''並且如果自從使用'SingleOrDefault()'後沒有找到記錄,則不會失敗,但對於給定的XML,它又返回值 – sll

相關問題