Toon posts:

[C#] XML Attributen uitlezen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met een programma dat data (HTML sourcecode) uitleest uit een HTML pagina.
Om deze date te kunnen gebruiken wilde ik de sourcecode omzetten naar XML, dit lukt prima.
De code voor het uitlezen van een XML bestand is echter wat slordig.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        int x = 0;
            int i = 0;
            
            XmlTextReader reader = new XmlTextReader("xx.xml"); 
        
            textBox2.Text = "";

            while (reader.Read()) 
            {
                if (reader.NodeType == XmlNodeType.Text)
                {
                
                x++;
                i++;
                    
                textBox2.Text += i + ": " + reader.ReadString() + " " + System.Environment.NewLine;
                label1.Text = x.ToString();
                    
                if (i == 5) i = 0;

                
//test voor 500 regels
if (x == 500) break;
    
                }
            }


De XML die ik inlees heeft de volgende indeling (zonder XML header etc):

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<REGEL>
<TD CLASS="COL1">12345</TD>
<TD CLASS="COL2">17:06:28</TD>
<TD CLASS="COL3">Bericht 1
<SPAN CLASS="M">Bericht2</SPAN>
</TD>
</REGEL>
<REGEL>
<TD CLASS="COL1">12345</TD>
<TD CLASS="COL2">17:06:28</TD>
<TD CLASS="COL3">Bericht 1
<SPAN CLASS="M">Bericht2</SPAN>
</TD>
</REGEL>
<REGEL>
<TD CLASS="COL1">12345</TD>
<TD CLASS="COL2">17:06:28</TD>
<TD CLASS="COL3">Bericht 1
<SPAN CLASS="M">Bericht2</SPAN>
</TD>
</REGEL>


Ik lees dus nu per regel in, in de hoop dat de indeling van het XML document altijd hetzelfde is.
Probleem is dat dit niet altijd het geval is, daarom ben ik op zoek gegaan naar een manier
die kijkt wat het attribuut van <TD> is.
Het doel is dus dat ik code zoek die per <REGEL> kijkt wat het attribuut van de TD of SPAN is en deze aan de hand van het attribuut (bv COL1) deze in een tijdelijke COL1 variable stopt, en attributen die 'nieuw' zijn niet gebruikt.

Ik heb op het forum gezocht naar oplossingen, en zag wel een bericht dat ging over .HasAttributes maar als ik mijn huidige code wil combineren met deze nieuwe methode dan loopt het helemaal mis.

Heeft iemand een oplossing voor mij, misschien is het wel zeer eenvoudig (of niet) maar ik kom er nu niet uit...

Alvast Bedankt,

Nick

  • whoami
  • Registratie: December 2000
  • Laatst online: 20-04 18:20
Kijk eens naar de member methods van de XmlTextReader class die je nu gebruikt.
Er zit daar nl. een method die GetAttribute heet.

Check anders ook eens de XmlDocument class, de XpathNavigator en de XpathNodeIterator class. Mbhv deze classes kan je Xpath queries op je xml loslaten.

Maar, heeft de website vanwaar je die data wilt inlezen geen rss feed ofzo ? (Ik zie -althans, ik ga er adhv jouw voorbeeld- vanuit dat het om een nieuwssite gaat).

https://fgheysels.github.io/


Verwijderd

Topicstarter
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
            int x = 0;
            
            XmlTextReader reader = new XmlTextReader("hm.xml"); 

            while (reader.Read() && x < 100) 
            {
        
                switch (reader.GetAttribute("CLASS"))
                {
                    case "COL1" :
                        reader.ReadString();
                        break;
                    case "COL2" :
                        reader.ReadString();
                        break;
                    case "COL3" :
                        reader.ReadString();
                        break;
                    case "COL7" :
                        reader.ReadString();
                        if (reader.GetAttribute("CLASS") == "M")
                        {
                            reader.ReadString();
                        }
                        break;
                    default :
                        break;
                }
        
                x++;


Bedankt voor de tips,

dit is tot nu toe mijn oplossing, de reader.ReadString() moet nog aan variablen worden toegewezen, maar het idee is denk ik wel zichtbaar. Als het goed is moet dit werken, als iemand nog tips heeft dan hoor ik die graag...