Xml niet compleet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Hallo,

Na wat knutselen met Xml kom ik voor een probleempje staan, ik heb een Xml document op internet staan die er grofweg zo uit ziet:

code:
1
2
3
4
5
6
7
8
9
<MOVIEINFORMATION> 
  <AMOUNT>1</AMOUNT> 
  <MOVIE1>
    <MOVIEID>1</MOVIEID>
    <GENREID>5</GENREID> 
    <VIEWS>514</VIEWS> 
    <NAME>2012</NAME>
    </MOVIE1>
</MOVIEINFORMATION>


Het enige probleem is als ik de bron uitlees via vb.net (die er precies zo uit ziet als in mijn voorbeeld) met de code:

Dim HTMLBody As String = WebMain.Document.Body.InnerHtml.ToString

Waarbij 'WebMain' een webbrowser is dan wordt HTMLBody dit:

code:
1
2
3
4
5
6
7
8
1</AMOUNT> 
  <MOVIE1>
    <MOVIEID>1</MOVIEID>
    <GENREID>5</GENREID> 
    <VIEWS>514</VIEWS> 
    <NAME>2012</NAME>
    </MOVIE1>
</MOVIEINFORMATION>


Oftewel ik mis '<MOVIEINFORMATION><AMOUNT>', dit doet zich ook voor als ik deze code gebruik:

Messagebox.show(WebMain.Document.Body.InnerHtml.ToString)

Wat nogal raar is want op hetzelfde moment is de source code van WebMain toch compleet (zoals voorbeeld 1).

Bij voorbaat dank,

ObAt

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • Kixtart
  • Registratie: Mei 2004
  • Niet online

Kixtart

Destruction = Improvement

Maak je ook gebruik van een XML header?

☻/
/▌
/ \


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
De XML-declaratie ontbreekt en een header kan ook nog wel eens handig zijn. Dus, is jouw xml wel een xml?

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Waarom gebruik je een webbrowser om dat op te vragen, in the first place? Je kunt m.i. veel beter een WebClient aanmaken, de DownloadString-method gebruiken, en daarna in een XmlDocument inladen?

Even los uit de mouw:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Main()
{
    WebClient wc = new WebClient();
    wc.DownloadStringCompleted += wcDlCompleted;
    wc.DownloadStringAsync("some_url");
}

void wcDlCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    XmlDocument xd = new XmlDocument();
    xd.Load(e.Result);

    Console.Write(xd.OuterXml);
}

We are shaping the future


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
cariolive23 schreef op maandag 05 april 2010 @ 22:05:
De XML-declaratie ontbreekt en een header kan ook nog wel eens handig zijn. Dus, is jouw xml wel een xml?
Na wat contact met de beheerder van het php bestand ben ik erachter gekomen dat hij niet gebruikt maakt van een Xml functie in Php maar het 'echo'd' alles gewoon in een formaat wat op Xml lijkt. Hij heeft geen header omdat hij die niet kan echo'en.

Wat is nu handiger, het Php bestand gaan aanpassen of het de vb.net applicatie de missende header handmatig te laten toevoegen?

@Alex

Bedankt voor de code ik zal hem uit proberen :)

ObAt

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 10:08

Haan

dotnetter

ObAt schreef op dinsdag 06 april 2010 @ 07:58:

Wat is nu handiger, het Php bestand gaan aanpassen of het de vb.net applicatie de missende header handmatig te laten toevoegen?
Garbadge In == Garbadge Out, dus ik zou pleiten voor aanpassen van het bronbestand. Dat dat niet goed zou kunnen met PHP geloof ik niets van.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Ok, bedankt ik ga het proberen :)

ObAt

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
ObAt schreef op dinsdag 06 april 2010 @ 07:58:
[...]
Na wat contact met de beheerder van het php bestand ben ik erachter gekomen dat hij niet gebruikt maakt van een Xml functie in Php maar het 'echo'd' alles gewoon in een formaat wat op Xml lijkt. Hij heeft geen header omdat hij die niet kan echo'en.
Oh boy, dat niveau... :'(
Wat is nu handiger, het Php bestand gaan aanpassen of het de vb.net applicatie de missende header handmatig te laten toevoegen?
Veel keuze heb je niet, wat je nu ontvangt, is geen XML en kan de grootste fouten/blunders bevatten die helemaal nergens voor nodig zijn. Laat hem/haar de boel aanpassen en fatsoenlijke XML aanmaken, dat is kinderachtig eenvoudig en voorkomt vele fouten. De oplossing voor jouw huidige probleem komt daarbij ook binnen handbereik, je ontvangt dan geldige XML waar je wat mee kan.

Acties:
  • 0 Henk 'm!

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
Als je toch die php zou gaan aanpassen, kijk dan ook eens naar de tag '<movie1>' waarvoor staat die 1? ga je een xml bestand krijgen <movie1/><movie2/>... ? Dat kan toch ook niet de bedoeling zijn, er staat toch al een movieid in je movie element.

Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
'MovieID' is een nummer wat uniek is per film, vergelijkbaar met Moviemeter, waar Avatar het id '17552' heeft gekregen, het heeft dus niets te maken met de <movie1> tag :)

@cariolive

Niet iedereen is gelijk zo goed als jou :o , maar ik snap wat je bedoelt.

ObAt

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG


Acties:
  • 0 Henk 'm!

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
Dus je hebt een uniek id in je movie tag, waarom dan nog een nummering in je tag-name. Een nummering mag toch een externe referentie zijn, zolang het maar uniek is. Als je nog een aparte nummering in je xml wilt dan doe je dat met <movie id="1"> en niet met <movie1>. Je mag natuurlijk een getal gebruiken in je tag-name om onderscheid te maken tussen verschillende tag's met dezelfde naam (al is het dan beter om een namespace te gebruiken, of een attribute) maar een id in de tagname gaat alleen maar moeilijker werken als je later alle movie tag's bv. wilt opvragen.
Of anders, probeer eens een schema te maken van die xml rekening houdend met eventueel duizenden movie tags in 1 xml.

Als die nummering in je tag geen id is die bij elk element anders is heb ik niets gezegd maar daarom vraag ik wat die nummer is.

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
kluyze schreef op dinsdag 06 april 2010 @ 08:44:
Als die nummering in je tag geen id is die bij elk element anders is heb ik niets gezegd maar daarom vraag ik wat die nummer is.
Ben ook benieuwd. Als dat inderdaad opgehoogd wordt (<movie1><movie2> e.d.) kun je ook geen hout met zaken als XPath bijvoorbeeld.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 18:27
Haan schreef op dinsdag 06 april 2010 @ 08:09:
[...]

Garbadge In == Garbadge Out, dus ik zou pleiten voor aanpassen van het bronbestand. Dat dat niet goed zou kunnen met PHP geloof ik niets van.
In het systeem waarin ik ontwikkel (ook een PHP omgeving) maken we xml-bestanden, waarin we ontiegelijk veel informatie stoppen. Tevens genereren we xml bestanden die in een andere (overheids-orgaan) applicatie ingelezen wordt. Dit gaat ook prima. De xml-bestanden kan je op verschillende manieren aanmaken, maar via DOMxml (http://nl.php.net/manual/en/book.domxml.php) kan je prima helemaal correcte xml aanmaken.

Dat je het niet gelooft is dus volkomen terecht. Je moet alleen weten wat je doet, en hoe de hele boel werkt.

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
jbdeiman schreef op dinsdag 06 april 2010 @ 10:52:
Dat je het niet gelooft is dus volkomen terecht. Je moet alleen weten wat je doet, en hoe de hele boel werkt.
Joh, sowieso; hij mist een header. Da's 1 extra echo, niet bepaald rocket surgery.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Hier staat een simpel voorbeeldje van het aanmaken van XML met DOM in PHP:
http://wiki.phpfreakz.nl/XML

En dat is inclusief het sturen van een correcte header.

Uiteraard staat dat ook allemaal in de handleiding op php.net. Op http://www.xml.com/ vind je ook heel veel informatie over XML, wat het is, hoe je het opstelt, etc. etc. Genummerde tags zoals MOVIE1 zijn natuurlijk een nogo, daarmee degradeer je XML tot een onbruikbare string en ga je de uitspraak "xml is moeilijk" voor je kiezen krijgen. xml is heel simpel maar soms hebben mensen de neiging om alles extreem moeilijk te maken. Het handmatig aanmaken van xml en dit gaan echoen in PHP, dat is zo'n voorbeeld van onbruikbare "xml".

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 18-09 20:31
Hydra schreef op dinsdag 06 april 2010 @ 10:59:
[...]


Joh, sowieso; hij mist een header. Da's 1 extra echo, niet bepaald rocket surgery.
Alleen zou het de foutgevoeligheid ten goede komen als die xml niet wordt gegenereerd met simpele echo's, maar met domxml. Hetgeen op zichzelf ook niet zo ontzettend moeilijk is, dat is waar.

Het xml model dat Obat(of z'n collega aan de php-zijde) heeft bedacht is dus inderdaad ook niet ideaal. Als je elementen gaat nummeren, ondermijn je imho het hele idee van xml. Je kunt het dan ineens een stuk moeilijker geautomatiseerd verwerken omdat de elementen dynamische namen hebben gekregen. Ik zou het eerder zo doen. (heb zelf ook weinig xml ervaring, dus waarschijnlijk kan het beter)

XML:
1
2
3
4
5
6
7
8
<MOVIEINFORMATION> 
  <!-- informatie over de gehele database -->
  <movies>
    <movie id="1" genre_id="5" views="514" name="2012"/>
    <movie id="2" genre_id="3" views="235" name="X-Men Origins: Wolverine"/>
    <!-- etc -->
  </movies>
</MOVIEINFORMATION>


Zou het met dit model in gedachten niet gemakkelijker zijn(met name aan de php-zijde, waar de noob zit) om JSON te gebruiken? Hij kan dan gewoon z'n gegevens in een array gooien en doorgeven met json_encode(). Veel simpeler dan dat kan je het denk ik niet maken.

Acties:
  • 0 Henk 'm!

  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 18:27
@doeterniettoe

Met alleen de attributen zoals jij ze gebruikt krijg je wel een xml die gemakkelijk automatisch te verwerken is.
Echter is het zo ook prima leesbaar. Voordeel van dit model is dat je een wat overzichtelijker bestand krijgt.

XML:
1
2
3
4
5
6
7
8
9
10
<MOVIEINFORMATION> 
  <MOVIES>
    <MOVIE>
        <MOVIEID>1</MOVIEID>
        <GENREID>5</GENREID> 
        <VIEWS>514</VIEWS> 
        <NAME>2012</NAME>
    </MOVIE>
  </MOVIES>
</MOVIEINFORMATION>

[ Voor 9% gewijzigd door jbdeiman op 06-04-2010 12:23 ]


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Beide voorbeelden zijn ongelukkig, ze maken beiden geen goed gebruik van elementen versus attributen.

When to use elements versus attributes

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 10:08

Haan

dotnetter

Interessant artikel, ik vind het zelf ook altijd erg lastig om te bepalen wanneer je een attribute of beter een element gebruikt.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Wanneer de XML wellformed is zou je zelfs nog kunnen overwegen om (de)serialization te gebruiken. Dat scheelt weer XML-parsing :)

We are shaping the future


Acties:
  • 0 Henk 'm!

  • ObAt
  • Registratie: Januari 2009
  • Laatst online: 12-09 13:59

ObAt

Loading...

Topicstarter
Bedankt allen voor jullie overweldigende hulpgolf, ik ga de reacties is 6 maal doorlezen tot ik het snap en daarna is alles doorgeven aan de Php-kant van het team :D.

In ieder geval bedankt voor jullie hulp tot nu :)

ObAt

Mijn dagelijkse spamdosis is te lezen op http://twitter.com/#!/ObAtG

Pagina: 1