如何将Xml代码转换为linq

时间:2014-01-06 07:03:00

标签: xml linq

我正在阅读一个教程而且效果很好。但我想知道如何用linq做到这一点

我正在尝试这样的事情

XDocument doc = XDocument.Load("http://clients1.google.com/complete/search?hl=" + lang+ "&output=toolbar&q=" + word+ "");

var suggestions = doc.Descandands("suggestions").Where( ....

但我有点困惑。这是我的xml代码

string lang = drpLang.SelectedValue;
    //TextBoxa girilen değer alınır.
    string word = txtSearch.Text;
    //Google Suggest Değelerini içeren Labelı ilk başta temizliyoruz.
    lblRetVal.Text = "";
    /*Burada Google Suggest değerlerini içeren servisin kaynak kodunu alıyoruz.
     * Xml olarak çekerken eşleşmeyen karakterler olduğu için böyle bir yol izliyoruz.
     * */
    WebRequest req = HttpWebRequest.Create("http://clients1.google.com/complete/search?hl=" + dil + "&output=toolbar&q=" + kelime + "");
    WebResponse response = req.GetResponse();
    StreamReader retValues = new StreamReader(response.GetResponseStream());
    string html = retValues.ReadToEnd();

    //XmlDocument xdoc = new XmlDocument();
    ////Tüm sayfayı çektiğimiz için sayfanın kaynak kodunu xml olarak yüklenmesi sağlıyoruz.
    //xdoc.LoadXml(html);
    //XmlNodeList nodeList = xdoc.SelectNodes("toplevel/CompleteSuggestion/suggestion");
    ////Burada alınan nodeları döngüye alıyoruz.
    //foreach (XmlNode item in nodeList)
    //{
    //    //Alınan nodeların data Attributes değerini tek tek labela yazdırıyoruz.
    //    lblRetVal.Text += item.Attributes["data"].InnerText + "<br>";
    //} 

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解正确,但如果您使用linq查询xml数据,我建议您创建一个包含所选后代中所有xml元素的类,并考虑下面的示例代码。

首先,我创建包含我想要查询的所有xml元素的类

public class CompleteSuggestion
{
    public string suggestionData { get; set;}
}

这是我的linq to xml

public List<CompleteSuggestion> GetSuggestions(string lang, string word) 
{
    XDocument doc = XDocument.Load("http://clients1.google.com/complete/search?hl=" + lang+ "&output=toolbar&q=" + word+ "");
    List<CompleteSuggestion> suggestions = (from s in doc.Descendants("suggestion")
                                            select new CompleteSuggestion
                                            {
                                                suggestionData = s.Attribute("data").Value
                                            }).ToList();
    return suggestions;
}

最后,调用您想要的方法并使用它

List<CompleteSuggestion> suggestions = GetSuggestions("en", "angle");
foreach (CompleteSuggestion s in suggestions)
{
    Response.Write(s.suggestionData);
}