xml tags zonder namespace aanroepen vanuit tag met namespace
Ik wil een aangeleverde xml-structuur integreren binnen php. Aan de structuur van de xml ben ik gebonden en kan dus niets wijzigen. De structuur bevat tags met en zonder namespaces en ziet er vergelijkbaar uit als onderstaande code waarmee ik aan het testen ben. Afzonderlijk gebruik van tags zonder namespaces of enkel tag met namesspaces krijg ik werkend binnen php. Het combineren van deze twee tags lukt me niet.
In onderstaande code wordt de loop foreach($tagdata->persoon as $persoon) niet gestart. Dit blijkt uit de sourch code. Het script stopt net als de loop zou moeten worden gestart. Geen enkel echo wordt getoond binnen de loop foreach($tagdata->persoon as $persoon).
Kan iemand mij uitleggen wat er niet goed is aan de code ? Ik heb werkelijk al van alles geprobeerd.
Nergens op internet krijg ik iets gevonden ook php programmeurs die ik heb gesproken houden de bood af. Wil ik dan iets wat niet kan of zo ?
<code>
Code (php)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
$xml = '<voorbeeld xmlns:kennis="link"
xmlns:tagg="verbinding"
xmlns:aanhef="doorgang"
xmlns:voornaam="verwijzing"
xmlns:achternaam="brug"
xmlns:hobby="my.foo.urn">
<kennis>
<tagg:a>
<aanhef:a>Mevr </aanhef:a>
<persoon>
<voornaam:a>Caro</voornaam:a>
<achternaam:a>Emerald gaat</achternaam:a>
<hobby:a> graag zingen </hobby:a>
</persoon>
</tagg:a>
</kennis>
<kennis>
<tagg:b>
<aanhef:b>Dhr </aanhef:b>
<persoon>
<voornaam:b>Bas</voornaam:b>
<achternaam:b>van de Ven</achternaam:b>
<hobby:b> drummen </hobby:b>
</persoon>
</tagg:b>
</kennis>
<kennis>
<tagg:c>
<aanhef:c>Jongeman </aanhef:c>
<persoon>
<voornaam:c>Ruben</voornaam:c>
<achternaam:c>Verhoeven</achternaam:c>
<hobby:c> voetballen </hobby:c>
</persoon>
</tagg:c>
</kennis>
</voorbeeld>' ;
$sxe = new SimplexmlElement($xml) ;
foreach($sxe->kennis as $kennis) {
$tagdata = $kennis->children('verbinding'); // EXTRA TAG
$aanhefdata = $tagdata->children('doorgang');//AANHEF
echo "De aanhef is : ".$tagdata->a.$aanhefdata->a;
echo $tagdata->b.$aanhefdata->b;
echo $tagdata->c.$aanhefdata->c;
foreach($tagdata->persoon as $persoon) {
$Vnaamdata = $persoon->children('verwijzing'); //VOORNAAM
$Anaamdata = $persoon->children('brug');// ACHTERNAAM
$hobbydata = $persoon->children('my.foo.urn');//HOBBY
echo $tagdata->a.$aanhefdata->a.$Vnaamdata->a.$Anaamdata->a.$hobbydata->a;
echo $tagdata->b.$aanhefdata->b.$Vnaamdata->b.$Anaamdata->b.$hobbydata->b;
}
/*echo $tagdata->b.$aanhefdata->b.$Anaamdata->b.$hobbydata->b;
echo $tagdata->c.$aanhefdata->c.$Anaamdata->c.$hobbydata->c;*/
echo '<br/>';
}
echo "<br>";
?>
$xml = '<voorbeeld xmlns:kennis="link"
xmlns:tagg="verbinding"
xmlns:aanhef="doorgang"
xmlns:voornaam="verwijzing"
xmlns:achternaam="brug"
xmlns:hobby="my.foo.urn">
<kennis>
<tagg:a>
<aanhef:a>Mevr </aanhef:a>
<persoon>
<voornaam:a>Caro</voornaam:a>
<achternaam:a>Emerald gaat</achternaam:a>
<hobby:a> graag zingen </hobby:a>
</persoon>
</tagg:a>
</kennis>
<kennis>
<tagg:b>
<aanhef:b>Dhr </aanhef:b>
<persoon>
<voornaam:b>Bas</voornaam:b>
<achternaam:b>van de Ven</achternaam:b>
<hobby:b> drummen </hobby:b>
</persoon>
</tagg:b>
</kennis>
<kennis>
<tagg:c>
<aanhef:c>Jongeman </aanhef:c>
<persoon>
<voornaam:c>Ruben</voornaam:c>
<achternaam:c>Verhoeven</achternaam:c>
<hobby:c> voetballen </hobby:c>
</persoon>
</tagg:c>
</kennis>
</voorbeeld>' ;
$sxe = new SimplexmlElement($xml) ;
foreach($sxe->kennis as $kennis) {
$tagdata = $kennis->children('verbinding'); // EXTRA TAG
$aanhefdata = $tagdata->children('doorgang');//AANHEF
echo "De aanhef is : ".$tagdata->a.$aanhefdata->a;
echo $tagdata->b.$aanhefdata->b;
echo $tagdata->c.$aanhefdata->c;
foreach($tagdata->persoon as $persoon) {
$Vnaamdata = $persoon->children('verwijzing'); //VOORNAAM
$Anaamdata = $persoon->children('brug');// ACHTERNAAM
$hobbydata = $persoon->children('my.foo.urn');//HOBBY
echo $tagdata->a.$aanhefdata->a.$Vnaamdata->a.$Anaamdata->a.$hobbydata->a;
echo $tagdata->b.$aanhefdata->b.$Vnaamdata->b.$Anaamdata->b.$hobbydata->b;
}
/*echo $tagdata->b.$aanhefdata->b.$Anaamdata->b.$hobbydata->b;
echo $tagdata->c.$aanhefdata->c.$Anaamdata->c.$hobbydata->c;*/
echo '<br/>';
}
echo "<br>";
?>
</code>
Gewijzigd op 27/06/2014 17:39:10 door Bas van de Ven
Dit is je derde topic over namespaces in XML. Niet flauw bedoeld hoor, dus ook niet zo lezen, maar dat is wel een signaal voor de richting waarin je het bijlezen en bijspijkeren moet zoeken.
Misschien xlst om de xml om te vormen naar iets waar je wel wat mee kunt?
http://stackoverflow.com/questions/595946/parse-xml-with-namespace-using-simplexml levert je misschien iets op.