简体   繁体   中英

XML to string (C#)

I have a XML loaded from a URL like this:

WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;

try
{
    string reply = client.DownloadString("http://Example.com/somefile.xml");
    label1.Text = reply;
}
catch
{
    label1.Text = "FAILED";

}

That XML belongs to a RSS Feed. I want that label1.Text shows just the titles of that XML. How can I achieve that?

Example of label1.Text

This is my first title    -    This is my 2nd title    -    And this is my last title
var xml= XElement.Parse(reply);
label1.Text = string.Join(Environment.NewLine, xml
.Descendants()
.Where (x => !string.IsNullOrEmpty(x.Value))
.Select(x=> string.Format("{0}: {1}", x.Name, x.Value))
.ToArray());

You can load your XML into an XmlDocument and then use XPath to Get the value of each node you're targeting.

  XmlDocument doc = new XmlDocument(); doc.LoadXml(reply); XmlNodeList nodes = doc.SelectNodes("//NodeToSelect"); foreach (XmlNode node in nodes) { //If the value you want is the content of the node label1.Text = node.InnerText; //If the value you want is an attribute of the node label1.Text = node.Attributes["AttibuteName"].Value; } 

If you are not familiar with XPath you can always check here : http://www.w3schools.com/xpath/xpath_syntax.asp

You probably need to parse the RSS XML manually to get the title. Here is some sample code for your reference:

private static List<FeedsItem> ParseFeeds(string feedsXml)
{
    XDocument xDoc = XDocument.Parse(feedsXml);
    XNamespace xmlns = "http://www.w3.org/2005/Atom";

    var items = from entry in xDoc.Descendants(xmlns + "entry")
                select new FeedsItem
                {
                    Id = (string)entry.Element(xmlns + "id").Value,
                    Title = (string)entry.Element(xmlns + "title").Value,
                    AlternateLink = (string)entry.Descendants(xmlns + "link").Where(link => link.Attribute("rel").Value == "alternate").First().Attribute("href").Value
                };

    Console.WriteLine("Count = {0}", items.Count());
    foreach(var i in items)
    {
        Console.WriteLine(i);
    }

    return null;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM