[PHP/XML] Uitlezen attribute

Pagina: 1
Acties:
  • 269 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WaarAnders
  • Registratie: Juni 2001
  • Laatst online: 20-07 21:31
Ik ben al 2 dagen bezig met uit te zoeken hoe ik een xml file met php inlees en vervolgens print. Het inlezen lukt inmiddels met behulp van de php functie load. Wat niet lukt, waarschijnlijk omdat ik iets mis/niet begrepen heb, is het printen van een attribuut.

Het is nogal een beginnersvraag, maar ik kom er echt niet uit. Als iemand me al in de juiste richting kan helpen zou het al erg mooi zijn.

Ik heb uiteraard google en zoekmachine GoT gebruikt. Daarmee kwam ik op de volgende sites:
http://www.w3schools.com/dom/dom_nodes_get.asp
http://nl2.php.net/manual...-getelementsbytagname.php
code:
1
2
3
4
5
6
7
<?php

$xmlDoc = new DOMDocument();
$xmlDoc->load("10.xml");

$x=$xmlDoc->getElementsByTagName('Product');
?>


Ik moet gebruik maken van getAttribute('attribuut'), maar waar in de code en hoe echo ik dit?

Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Volgens mij moet je XMLreader hebben ;)
http://nl2.php.net/manual/nl/ref.xmlreader.php

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • WaarAnders
  • Registratie: Juni 2001
  • Laatst online: 20-07 21:31
hmm, ziet er veelbelovend uit, maar wederom blijf ik steken.

code:
1
2
3
4
5
6
7
8
9
10
11
<?
$doc = new XMLReader();
$doc->open("10.xml");
$bla = $doc->moveToElement();
echo "$bla";
$bla = $doc->moveToFirstAttribute();
echo "$bla";
$bla = $doc->getAttribute("Name");
echo "$bla hmm ";

?>


Ik zou zeggen dat ik een basis moet aangeven voordat ik kan moven?

Document openen -> naar juiste element gaan -> element attribuut kiezen -> attribuut waarde lezen -> attribuut waarde printen. Dat is toch de juiste volgorde?

* WaarAnders snapt er echt de ballen van

Acties:
  • 0 Henk 'm!

  • semicolon
  • Registratie: Mei 2004
  • Niet online
Het staat vrij duidelijk aangegeven, getElementsByTagName geeft een DOMNodeList op, en je moet een van een DOMElement de attribute uitlezen. Dus loop je door de DOMNodeList heen (met bijvoorbeeld foreach) om per gevonden 'Product' DOMElement de attribute op te halen.

2e comment voor een voorbeeld van precies wat je vraagt.

-edit:
Om te reageren op je nieuwe post; je moet in de documentatie beter letten op wat een functie/method returned, en wat je daarmee moet/kunt doen.

[ Voor 15% gewijzigd door semicolon op 13-07-2007 21:16 ]

:D/-<


Acties:
  • 0 Henk 'm!

  • Little Penguin
  • Registratie: September 2000
  • Laatst online: 08-06 20:43
WaarAnders schreef op vrijdag 13 juli 2007 @ 20:32:


Ik heb uiteraard google en zoekmachine GoT gebruikt. Daarmee kwam ik op de volgende sites:
http://www.w3schools.com/dom/dom_nodes_get.asp
http://nl2.php.net/manual...-getelementsbytagname.php
code:
1
2
3
4
5
6
7
<?php

$xmlDoc = new DOMDocument();
$xmlDoc->load("10.xml");

$x=$xmlDoc->getElementsByTagName('Product');
?>


Ik moet gebruik maken van getAttribute('attribuut'), maar waar in de code en hoe echo ik dit?
Ik heb dit niet getest in PHP omdat ik geen XML ondersteuning heb (en ff opnieuw compileren heb ik nu ff geen zin in), maar als ik het goed zie dan maak je gebruik van de DOMDocument API die door het W3C gestandardiseerd is - voor een volledige omschrijving van de DOM API verwijs ik je naar de Document Object Model Level 2 specificatie.

Om je toch een beetje op weg te helpen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

$xmlDoc = new DOMDocument();
$xmlDoc->load("10.xml");

$x=$xmlDoc->getElementsByTagName('Product');
// $x bevat een referentie naar een NodeList [1]

for ($i = 0; $i < $x.length; $x++) {
  echo $x.items($i).$getAttribute("attribuut")."\n";
}
// LET OP: Deze code heb ik dus niet getest, 
// maar is een conversie van mijn XML DOM ervaringen in Java en Delphi...
?>

[1] NodeList in de DOM Level 2 documentatie.

Waar het dus vooral om gaat is dat de getElementsByTagName een lijst met nodes teruggeeft en niet 1 element waar je waarschijnlijk op hoopte...

N.B. Ik geef direct toe dat de documentatie op de site van het W3C erg droge kost is, maar als je het eenmaal leert lezen is het 't beste referentiemateriaal wat er isc - omdat ze de gehele standaard technisch omschrijven....

[ Voor 9% gewijzigd door Little Penguin op 13-07-2007 21:23 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ietwat off topic misschien, maar waarom hoor ik nooit het woord "hash" gebruiken? ik ben ueberhaupt pas in één topic over php het begrip key>value tegenhgekomen. mij verbaast dat een beetje, maar misschien komt dat door mijn perl-achtergrond.

Acties:
  • 0 Henk 'm!

  • WaarAnders
  • Registratie: Juni 2001
  • Laatst online: 20-07 21:31
bedankt voor alle hulp. Uiteindelijk is dit het geworden

code:
1
2
3
4
5
$xmlDoc = new DOMDocument();
$xmlDoc->load("10.xml");
$x=$xmlDoc->getElementsByTagName('Product')->item(0);
$attributeNode = $x->getAttributeNode('Name');
echo $attributeNode->value."\n";


Ik heb geen FOR loop nodig, ik weet namelijk (in dit geval) precies waar het staat.

Acties:
  • 0 Henk 'm!

  • Muscrerior
  • Registratie: September 2005
  • Laatst online: 09-07 14:59
Je zou kunnen overwegen gebruik te maken van SimpleXML, vind ik persoonlijk erg handig in gebruik:

SimpleXML tutorial

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op vrijdag 13 juli 2007 @ 21:28:
ietwat off topic misschien, maar waarom hoor ik nooit het woord "hash" gebruiken? ik ben ueberhaupt pas in één topic over php het begrip key>value tegenhgekomen. mij verbaast dat een beetje, maar misschien komt dat door mijn perl-achtergrond.
Misschien omdat in PHP een array per definitie een hashtable / dictionary is?
Pagina: 1