Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: HTML parserointi WP7 (C#)

NuMiNi [02.12.2011 17:31:47]

#

HTML-koodi, josta pitäisi saada tietoja parseroitua, näyttää tuonnäköiseltä:

<td class="title">
<h4>
<strong>Lihavoitu teksti</strong>
Tavallinen teksti
</a>
</h4>
<span class="date">Päivämäärä</span>
</td>
<td class="format">Formaatti</td>

Ja tuosta pitäisi saada parseroitua tagien välissä olevat tekstit.
Koodini näyttää tältä:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using HtmlAgilityPack;

namespace DEMO
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        }

        private void Nouda(object sender, RoutedEventArgs e)
        {
            string etsittava;
            etsittava = textBox1.Text;

            HtmlWeb.LoadAsync("http://www.google.fi/", (s, args) =>
            {
                Tulokset.Text = String.Join(Environment.NewLine,
                                           args.Document.DocumentNode.Descendants("a").
                                            Select(
                                                x =>
                                                x.InnerText).ToArray());
            });
        }
    }
}

Nyt tarvisin vähän apua, miten tuo homma kannattaisi ratkaista. Eli html-sivulta etsitään textboxiin kirjoitettu teksti, ja tulostetaan tagien välissä olevat tekstit näytölle.

Mod. lisäsi kooditagit!

qeijo [24.12.2011 09:17:19]

#

Haiskahtaa vähän huonolta suunnittelulta kun on tarvetta tuollaiselle. Olisko XML sopivampi ja System.Xml? Mutta.. Jos ymmärsin oikein sinun pitää parsia tagien väliset stringit talteen?

        private void testaus()
        {
            string sisalto = "<td class=\"title\"><h4><strong>Lihavoitu teksti</strong>Tavallinen teksti</a></h4><span class=\"date\">Päivämäärä</span></td><td class=\"format\">Formaatti</td>";

            try {
                string hakuTulos = haeValista("<strong>", "</strong>", sisalto);
                //Jotain
            }
            catch (Exception ex) {
                //Jotain..
            }
            finally {
                //Jotain..
            }
        }

        public static string haeValista(string strAlku, string strLoppu, string strTeksti)
        {
            string[] result = { string.Empty, string.Empty };

            int iIndexOfBegin = strTeksti.IndexOf(strAlku);

            if (iIndexOfBegin != -1) {

                strTeksti = strTeksti.Substring(iIndexOfBegin + strAlku.Length);
                int iEnd = strTeksti.IndexOf(strLoppu);

                if (iEnd != -1) {
                    result[0] = strTeksti.Substring(0, iEnd);
                }
                else {
                    throw new Exception("Lopputagia ei löytynyt.");
                }
            }
            else {
                throw new Exception("Alkutagia ei löytynyt.");
            }
            return result[0];
        }
    }
}

NuMiNi [27.12.2011 12:59:55]

#

No joo, eli kyseessä olisi "musiikkitarkastaja" joka tarkistaa web-sivulta, onko käyttäjän syöttämältä yhtyeeltä tulossa uusia julkaisuja. Tavoite olisi, että kun käyttäjä syöttää yhtyeen nimen, ohjelma etsii ja tulostaa näytölle kyseisen yhtyeen (uuden) julkaisun nimen, formaatin, ja päivämäärän. Mikäli uusia ei ole tulossa, annetaan ilmoitus "Ei löydy" jne.

Lihavoitu teksti on source html koodissa yhtyeen/esittäjän nimi, ja tavallinen H4 on julkaisun nimi. Ne siis pitäisi saada sieltä parsittua ruutuun.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta