login  Naam:   Wachtwoord: 
Registreer je!
 Forum

XML element ophalen

Offline marten - 16/01/2007 11:01
Avatar van martenBeheerder Beste mensen,
ik zit nu een tijdje te klooien met informatie uit een xml bestand te halen. Ik heb het volgende xml bestand:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <root>
  3. <Header>
  4. <Communicatieid>1</Communicatieid>
  5. </Header>
  6. <Functie code="KS301201">
  7. <Parameters>
  8. <Kenteken type="string" verplicht="ja" direction="in">xx-xx-xx</Kenteken>
  9. <Merkenlijst type="long" verplicht="nee" direction="in">1</Merkenlijst>
  10. <Modellenlijst type="boolean" verplicht="nee" direction="in">True</Modellenlijst>
  11. <Bouwjaar type="long" verplicht="ja" direction="out">1998</Bouwjaar>
  12. <Bouwmaand type="long" verplicht="ja" direction="out">11</Bouwmaand>
  13. <Merken type="xml" verplicht="nee" direction="out">
  14. <Merk>
  15. <Id>94</Id>
  16. <Naam>Ford</Naam>
  17. </Merk>
  18. <Merk>
  19. <Id>95</Id>
  20. <Naam>Alfa Romeo</Naam>
  21. </Merk>
  22. <Merk>
  23. <Id>96</Id>
  24. <Naam>Audi</Naam>
  25. </Merk>
  26. <Merk>
  27. <Id>97</Id>
  28. <Naam>Bentley</Naam>
  29. </Merk>
  30. <Merk>
  31. <Id>98</Id>
  32. <Naam>BMW</Naam>
  33. </Merk>
  34. </Merken>
  35. <Merk type="xml" verplicht="ja" direction="out">
  36. <Id>128</Id>
  37. <Naam>Opel</Naam>
  38. </Merk>
  39. <Modellen type="xml" verplicht="nee" direction="out">
  40. <Model>
  41. <Id>327</Id>
  42. <Naam>Astra</Naam>
  43. </Model>
  44. <Model>
  45. <Id>322</Id>
  46. <Naam>Tigra</Naam>
  47. </Model>
  48. </Modellen>
  49. <Model type="xml" verplicht="ja" direction="out">
  50. <Id>321</Id>
  51. <Naam>Corsa</Naam>
  52. </Model>
  53. <Typen type="xml" verplicht="ja" direction="out">
  54. <Type>
  55. <Id>6820</Id>
  56. </Type>
  57. <Type>
  58. <Id>6821</Id>
  59. </Type>
  60. <Type>
  61. <Id>6825</Id>
  62. </Type>
  63. </Typen>
  64. </Parameters>
  65. </Functie>
  66. </root>


De bedoeling is dat ik allereerst het merk eruit ga halen. Dit is het merk dat hetvolgende bevat

<Merk type="xml" verplicht="ja" direction="out">
<Id>128</Id>
<Naam>Opel</Naam>
</Merk>

Hoe kan ik deze eruit halen met PHP.

19 antwoorden

Gesponsorde links
Offline Kr4nKz1n - 16/01/2007 11:03
Avatar van Kr4nKz1n Onbekend Je wil een XML bestand uitlezen met PHP?
Offline marten - 16/01/2007 11:11
Avatar van marten Beheerder inderdaad, ik heb al iets gezien van xmlreader, simplexml, domxml maar daar kom ik niet uit. Misschien dat iemand een voorbeeldje heeft? (Al veel voorbeelden gezien)
Offline Kr4nKz1n - 16/01/2007 11:22
Avatar van Kr4nKz1n Onbekend Ik denk toch echt dat je SimpleXML moet gebruiken.
Bij de reacties die ik heb gevonden stond dat er het vaakst.

http://nl2.php.net/manual/en/ref.simplexml.php
Offline Thomas - 16/01/2007 11:22
Avatar van Thomas Moderator Als je webserver PHP5 draait is alles makkelijk in arrays te zetten voor zover ik weet. Google eens op internet naar XML-tutorials i.c.m. parsing of wat dan ook. Bij mijn weten is hier zat over te vinden. Het kan ook geen kwaad zelf e.e.a. te proberen.
Offline marten - 16/01/2007 11:34
Avatar van marten Beheerder Ja maar als je al 3 weken aan het proberen bent en nog lukt het niet ....
Offline xSc - 16/01/2007 11:37
Avatar van xSc Onbekend Deze functie heb ik ooit eens geschreven:

  1. <?php
  2.  
  3. function LeesBestand($sBestand)
  4. {
  5.  
  6. if ($rParser = xml_parser_create())
  7. {
  8.  
  9. $sData = file_get_contents($sBestand);
  10.  
  11. xml_parser_set_option($rParser, XML_OPTION_CASE_FOLDING, 0);
  12. xml_parser_set_option($rParser, XML_OPTION_SKIP_WHITE, 1);
  13.  
  14. if (xml_parse_into_struct($rParser, $sData, $aWaarden))
  15. {
  16.  
  17. xml_parser_free($rParser);
  18.  
  19. return $aWaarden;
  20.  
  21. }
  22.  
  23. }
  24. else
  25. {
  26.  
  27. echo 'Bestand kan niet worden uitgelezen.';
  28.  
  29. }
  30.  
  31. }
  32. ?>


Je krijgt dus een array terug. De rest lukt je zelf wel.
Offline marten - 16/01/2007 15:57 (laatste wijziging 16/01/2007 15:57)
Avatar van marten Beheerder
  1. <?php
  2. $params = $dom->getElementsByTagName('Merk');
  3.  
  4. $dome = new DOMElement('Merk');
  5. foreach ($params as $param) {
  6. //Voor elk merk getattribute verplicht = ja
  7. if ($param->getAttribute('verplicht') == 'ja') {
  8. foreach ($param->childNodes as $nc) {
  9. //echo $nc->nodeValue . '<br />';
  10. echo $nc->nodeName . '<br />';
  11. }
  12.  
  13. }
  14. }
  15. ?>


Ik heb nu de volgende code. De echo levert echter 144 Toyota op (Id Naam) Ik wil dit nu uit elkaar houden zodat ik alleen het id (<Id>) en de naam (<Naam>) overhoud. Hoe kan ik dit het beste doen?
Offline Kr4nKz1n - 16/01/2007 16:01 (laatste wijziging 16/01/2007 16:02)
Avatar van Kr4nKz1n Onbekend een explode misschien?
  1. <?
  2. $v = explode(" ",$nc->nodeName);
  3. echo $v[0].$v1;
  4.  
  5. //split
  6.  
  7. list($id, $name) = split(" ",$nc->nodename);
  8. ?>
Offline marten - 16/01/2007 16:19
Avatar van marten Beheerder Nope
hij leest 2 waardes uit Id en naam maar hij print er 5 op het scherm namelijk:

#text
Id
#text
Naam
#text
Offline Kr4nKz1n - 16/01/2007 16:21 (laatste wijziging 16/01/2007 16:23)
Avatar van Kr4nKz1n Onbekend Wat bedoel je met #text?
Kopieer eens wat je ziet, letterlijk dus.

Want dan pak je met explode gewoon nummer 1 en 3.
Of zijn het ook zinnen?
Offline marten - 16/01/2007 16:26
Avatar van marten Beheerder zo is het letterlijk 
Offline Kr4nKz1n - 16/01/2007 16:27
Avatar van Kr4nKz1n Onbekend Dan explode je hem alsnog. Alleen dan is $v[1] het id en $v[2] de naam.
Offline marten - 16/01/2007 16:28
Avatar van marten Beheerder Nope ik explode hem en dan krijg ik in $v[1] de id en de naam 
Offline Simon - 16/01/2007 16:37
Avatar van Simon PHP expert explode hem op #text?
Offline marten - 16/01/2007 16:42
Avatar van marten Beheerder
Citaat:
[..code..]

Dit is mijn output
Offline Kr4nKz1n - 16/01/2007 16:44
Avatar van Kr4nKz1n Onbekend Zo, dat is niet veel.
En nu hebben we alleen de letterlijke namen, daar hebben we ook niets aan.
Offline marten - 16/01/2007 16:53
Avatar van marten Beheerder
Citaat:
Set merk = obj.getElementsByTagName("Merk")
if merk.length > 1 then
' Haal het merk op
For i = 0 to (merk.length - 1)
if merk.item(i).GetAttribute("verplicht") = "ja" then
merkstr = merk.item(i).childNodes(1).text
end if
Next


Dit is het in asp. Hier word gewerkt met M$ DOM
Offline Berten - 16/01/2007 17:02 (laatste wijziging 16/01/2007 17:10)
Avatar van Berten PHP beginner nm, xml file zou moete werken. Al is er klein foutje, er staat een <model> buiten de <modellen> tag
Offline marten - 16/01/2007 18:55
Avatar van marten Beheerder xml bestand kan ik niet aanpassen. Die model daarbuiten moet ik hebben evenals de Merk buiten de andere merken snap je
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.214s