2010-04-22 55 views
1

我有這樣的LINQ to XML查詢......LINQ到的子記錄XML內容

var Records = from Item in XDoc.Root.Elements("Item") 
       where (string)Item.Element("ItemNumber") == item.ID.ToString 
       select Item; 

...且ItemNumber是在XML中的參考號,(最初由這個程序寫的,但手動編輯通過「others」),item.ID是同一事物的數據庫版本。查詢執行的,我可以測試結果中的細項的數量...

if (Records.Count() < 1) 

...你的想法。我已經確定只有一個記錄,(編輯沒有刪除或複製/ multiplid項目)。

每個項目有幾個子字段。我想在將它們傳遞給數據庫更新子系統之前測試子字段的值是否合理。 XML由程序生成,但由用戶編輯,所以我需要真正檢查返回的內容。所以,我想......

if (DB_English.ToString() != Records.Elements("English").ToString()) 

... DB_English是從數據庫中,但在唱片的XML,不包含字段的內容,它包含了...

System.Xml.Linq.Extensions+<GetElements>d__29`1[System.Xml.Linq.XElement] 

。 ..那麼,如何在XML文件中獲取此元素的值?我需要檢查XML中的字段沒有被修改,(這個數據文件的手動編輯器不可能100%可靠)。

回答

0

試試這個

if (DB_English.ToString() != Records.Elements("English").InnerXML.ToString()) 

善良,

+0

上午丹, 試過,編譯器拋出此... 錯誤 'System.Collections.Generic.IEnumerable ' 不包含定義 'InnerXML'並且沒有找到接受類型'System.Collections.Generic.IEnumerable '的第一個參數的擴展方法'InnerXML'(您是否缺少使用指令或程序集引用?) – Fossaw 2010-04-23 07:06:20

0
Records.Elements("English").Value 

這會給你的XElement的值。但它只會返回文字。如果值中有html/xml,那麼這將不起作用,您將需要編寫一個擴展方法來獲取該值。

在這種情況下,這個環節應該有所幫助: http://blogs.msdn.com/ericwhite/archive/2008/12/22/convert-xelement-to-xmlnode-and-convert-xmlnode-to-xelement.aspx

+0

同類如上所述的錯誤... .Value或.Value()。 錯誤'System.Collections.Generic.IEnumerable '不包含'Value'的定義,也沒有接受'System.Collections'類型的第一個參數的擴展方法'Value' .Generic.IEnumerable '可以找到(你是否缺少使用指令或程序集引用?) – Fossaw 2010-04-26 09:14:22

0

我加入這個...

XElement X_EnglishE = null; // This is BLOODY CRAZY 
foreach (XElement i in Records) 
    { 
     X_EnglishE = i.Element("English"); // There is only one damned record! 
    } 
string X_English = X_EnglishE.Value.ToString(); 

...和測試得到的X_English字符串。這工作,但似乎很可笑!一定有更好的方法。