C# tekst van een website krijgen

Status
Niet open voor verdere reacties.
Oh, je check met HasAttributes hoort daar niet. Die moet je nog verwijderen. (dat krijg je met copy paste :p)


Dan krijg je deze regels (eerste zijn de headers)
Code:
Error getting match competitie: [Object reference not set to an instance of an object.]
Found Competitie: [1 - OJC ROSMALEN A1 - 17 - 13 - 4 - 0 - 43 - 11 - 40]
Found Competitie: [2 - TOP'27 A1 - 17 - 13 - 0 - 4 - 39 - 29 - 60]
Found Competitie: [3 - Juliana '31 A1 - 17 - 11 - 2 - 4 - 35 - 30 - 58]
Found Competitie: [4 - De Treffers A1 - 17 - 9 - 4 - 4 - 31 - 35 - 57]
Found Competitie: [5 - SV Meerssen A1 - 17 - 8 - 5 - 4 - 29 - 31 - 33]
Found Competitie: [6 - Groene Ster A1 - 16 - 7 - 1 - 8 - 21 - 54 - 34]
Found Competitie: [7 - Woezik A1 - 17 - 6 - 2 - 9 - 20 - 44 - 38]
Found Competitie: [8 - RKSV Nuenen A1 - 17 - 6 - 1 - 10 - 19 - 36 - 32]
Found Competitie: [9 - UNA A1 - 17 - 6 - 1 - 10 - 19 - 45 - 27]
Found Competitie: [10 - Deurne A1 - 17 - 4 - 4 - 9 - 16 - 39 - 34]
Found Competitie: [11 - ZSV A1 - 16 - 4 - 1 - 11 - 13 - 41 - 24]
Found Competitie: [12 - Blauw Geel'38/OtterW A1 - 17 - 1 - 1 - 15 - 3 - 60 - 18]
 
Laatst bewerkt:
Je mist een bracket in je xpath

Code:
"//div[@class=\"CustomTabs\"//a"
=>
Code:
"//div[@class=\"CustomTabs\"[B]][/B]//a"
 
Nog één vraagje dan ;p

[CPP] public async Task<List<News>> DownloadNewsAsync()
{
var url = string.Format("{0}/1/welkom/", BaseUrl);

Debug.WriteLine("DownloadNewsAsync");
Debug.WriteLine("\turl:{0}", url);

var source = await DownloadPageSourceAsync(url);

var doc = new HtmlDocument();
doc.LoadHtml(source);

var Nieuws = new List<News>();

var resultNodes = doc.DocumentNode.SelectNodes("//div[@class=\"CustomTabs\"]//div"); ////*[@id="Module_NieuwsItem_index"]/div/div
foreach (HtmlNode resultRow in resultNodes)
{
if (resultRow.HasAttributes) //title row has no attributes
{
try
{

var datum = resultRow.SelectSingleNode("./span[1]").InnerText.Trim();
var titel = resultRow.SelectSingleNode("./a[1]").InnerText.Trim();
var nieuws = resultRow.SelectSingleNode("./div[@class=\"tekst\"]").InnerText.Trim();
var nieuwsurl = resultRow.GetAttributeValue("href", string.Empty);

var news = new News(titel, nieuws, datum, nieuwsurl);
Nieuws.Add(news);

Debug.WriteLine("\t\t Found Program: [{0}]", news);
}
catch (Exception ex)
{
Debug.WriteLine("\t\t Error getting match program: [{0}]", ex.Message);
}
}
}

return Nieuws;
}[/CPP]

hoe krijg ik hier de nieuwsurl?
 
probeer eens eerst de link node selecteren zoals je bij titel doet?

Code:
var nieuwsurl = resultRow.SelectSingleNode("./a[1]").GetAttributeValue("href", string.Empty);
 
toch nog maar weer een vraagje ;p

Hoe moet deze code eruit zien als ik geen list terug wil krijgen?
[CPP]public async Task<List<VolledigNews>> DownloadVolledigNewsAsync(string NieuwsUrl)
{
var url = string.Format("{0}{1}", BaseUrl, NieuwsUrl);

Debug.WriteLine("DownloadNewsAsync");
Debug.WriteLine("\turl:{0}", url);

var source = await DownloadPageSourceAsync(url);

var doc = new HtmlDocument();
doc.LoadHtml(source);

var Nieuws = new List<VolledigNews>();

var resultNodes = doc.DocumentNode.SelectNodes("//div[@class=\"content\"]");
foreach (HtmlNode resultRow in resultNodes)
{
if (resultRow.HasAttributes) //title row has no attributes
{
try
{

var datum = resultRow.SelectSingleNode("./i[@id=\"ctl00_Mp_SkinHtml_content_ctl00_DatumAangemaaktLabel\"]").InnerText.Trim();
var titel = resultRow.SelectSingleNode("./div[@class=\"NieuwsItemDetails\"]/h1[1]").InnerText.Trim();
var inleiding = resultRow.SelectSingleNode("./p[@id=\"InleidingP\"]").InnerText.Trim();
var nieuws = resultRow.SelectSingleNode("./div[@id=\"Tekstdiv\"]//p").InnerText.Trim();

var news = new VolledigNews(titel, nieuws, inleiding, datum);
Nieuws.Add(news);

Debug.WriteLine("\t\t Found news: [{0}]", news);
}
catch (Exception ex)
{
Debug.WriteLine("\t\t Error getting news: [{0}]", ex.Message);
}
}
}

return Nieuws;
}
}[/CPP]
 
Zoiets als dit (method aangepast in notepad)

[CPP]public async Task<VolledigNews> DownloadVolledigNewsAsync(string NieuwsUrl)
{
var url = string.Format("{0}{1}", BaseUrl, NieuwsUrl);

Debug.WriteLine("DownloadNewsAsync");
Debug.WriteLine("\turl:{0}", url);

var source = await DownloadPageSourceAsync(url);

var doc = new HtmlDocument();
doc.LoadHtml(source);

var newsNode = doc.DocumentNode.SelectSingleNode("//div[@class=\"content\"]");

var datum = newsNode.SelectSingleNode("./i[@id=\"ctl00_Mp_SkinHtml_content_ctl00_DatumAangemaaktLabel\"]").InnerText.Trim();
var titel = newsNode.SelectSingleNode("./div[@class=\"NieuwsItemDetails\"]/h1[1]").InnerText.Trim();
var inleiding = newsNode.SelectSingleNode("./p[@id=\"InleidingP\"]").InnerText.Trim();
var nieuws = newsNode.SelectSingleNode("./div[@id=\"Tekstdiv\"]//p").InnerText.Trim();

return new VolledigNews(titel, nieuws, inleiding, datum);
}[/CPP]
 
En wat moet ik dan bij de itemssource neerzetten , want daar komt te staan dat de nieuws niet klopt: "cannot implicitly convert type 'Wakanutgeve.VolledigNews' to 'System.Collections.IList'. An explicit conversion exists (are you missing a cast)"

[CPP] protected async override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);

if (NavigationContext.QueryString != null)
{
var url = NavigationContext.QueryString["url"];
var nieuws = await DownloadVolledigNewsAsync(url);

VolledigNieuws.ItemsSource = nieuws;

}
}[/CPP]
 
Laatst bewerkt:
Je hebt nu de method waar je geen lijst meer terug krijgt dus valt er ook niets meer in een itemsource van een lijst te zetten?

Je hebt alleen wat textblockjes nodig denk ik voor de title, datum, inleiding, nieuws etc?
 
Maar hoe weet ik dat de textblocks de goede titel enzo pakken , want meer dingen in mijn project heet Titel
 
Omdat je maar een nieuws item hebt?

Je kunt zoiets doen:

xaml (even de goede property namen van je news class gebruiken)
Code:
<StackPanel Name="NewsPanel">
	<TextBlock Text="{Binding Title}" />
	<TextBlock Text="{Binding Date}" />
	<TextBlock Text="{Binding Content}" TextWrapping="Wrap"/>
</StackPanel>

onnavigatedto event
Code:
var nieuws = await DownloadVolledigNewsAsync(url);
NewsPanel.DataContext = nieuws;
 
Ik had wel al de longlistselector verwijderd, maar ik had er niet aangedacht om een stackpanel te gebruiken
 
Je kun een het ook gewoon in de grid zetten waar de list stond, je kunt het zo maken hoe je het zelf wilt. Stackpanel is gewoon een simpel voorbeeld, zelf gebruik ik het liefst een grid voor de meeste dingen.

Je kunt ook wel de datatemplate gebruiken van de list als je die al had gemaakt. Daar had je waarschijnlijk al een grid met textblocken.
 
Ik denk dat het dan wel zal werken , maar de xpath klopt weer eens niet ):, ik snap niet wat ik daar elke keer fout in doe
 
Als je een breakpoint zet kun je eens rustig kijken wat er wordt geselecteerd. Of via een browser plugin dan je ergens een xpath kunt invoeren en dat je het resultaat te zien krijgt in je browser.
 
Ik heb nou een plugin geinstalleerd en nou werkt ie. Op de site staan na sommige zinnen enters, hoe krijg ik dat in mijn app?
 
Als je bijvoorbeeld een <br/> tag hebt in de html kun je deze vervangen met een "\r\n" dit is een nieuwe regel voor een string.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan