2009-12-08 111 views
0

我有以下格式的XML的LINQ to XML查詢(基本)

"<root>" 
    "<page>" 
    "<title>text</title>" 
    "<text attrib1="1">some text</text>" 
    "<text attrib1="2">some text</text>" 
    "<text attrib1="3">some text</text>" 
    "<text attrib1="4">some text</text>" 

    "</page>" 

    "<page>" 
    "<title>text</title>" 
    "<text attrib1="1">some text</text>" 
    "<text attrib1="2">some text</text>" 
    "<text attrib1="3">some text</text>" 
    "<text attrib1="4">some text</text>" 

    "</page>" 
    "</root>" 

忽略 「」

現在我想這樣

 "<root>" 
    "<title>text</title>" 
    "<text attrib1="4">some text</text>" 
    "<title>text</title>" 
    "<text attrib1="4">some text</text>" 
    "</root>" 

生成的XML能這樣在一個查詢中實現? 我嘗試用兩個查詢

 var titleElms = 
      from t in allElements 
      select 
       new 
       { 
        Title = t.Element("title") 
       }; 

     var textElms = 
      from t in allText 
      where (string)t.Attribute("attrib1").Value == "4" 
      select 
      t; 

我不喜歡它的下面。那麼還有其他方法嗎?請幫助。

+0

你能告訴你正在嘗試使用XML,而不是文字呢? – UpTheCreek 2009-12-08 10:44:07

+0

嘿對不起你們即時通訊無法粘貼XML這裏的所有標籤兵刪除..:'( – Amit 2009-12-08 10:46:40

+0

放在一個代碼塊,就像你用C#做 – UpTheCreek 2009-12-08 10:47:13

回答

2

我不認爲這會給你你想要什麼作爲查詢會導致一個IEnumerable對象。意思是你想要一個單獨的對象,有很多標題和文本字段。這將返回一個標題和文本作爲Ienumerable對象中的對象的對象。

所以在您的例子中,你將有一個對象有兩個對象,每一個目前持有的標題和正文這些匿名對象。一旦你有了這個,你可以按照你想要的方式建立xml。這與您的解決方案沒有多大區別,但根據要求,它會爲您提供一個linq查詢。或者至少給你一個建立的想法。

XElement Results = XElement.Load("c:\\test.xml"); //load you xml 
    XNamespace NameSpace = Results.Name.Namespace; 
    var xe = (from page in Results.Elements(NameSpace + "page") 
       let title = page.Elements(NameSpace+"title")      
       let text = page.Elements(NameSpace+"text").Where(a=>a.Attribute("attrib1").Value.Equals("4")) 
       where text.Count() > 0 
     //the where is simply to remove any unncessary data 
     //if there was ever a page that didn't have attrib1 = 4 

      select new {title, text}); 

希望這一點,至少,給你一對夫婦的新思路

+0

感謝卡邁勒... :) – Amit 2009-12-08 12:30:58