namespaces in xml tag
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
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
Aan een landelijke instantie wil ik gegevens mbv xml overleggen. Deze instantie heeft me een structuur aangeleverd waar ik verder geen invloed op heb.
Ik was tot voorkort niet bekend met xml maar kom er een heel eind uit.
De structuur en de php-code zoals hier levert het gewenste resultaat op.
<?php
$xml = '<example xmlns:mel="link" xmlns:naam="verwijzing" xmlns:kind="my.foo.urn">
<kennis>
<naam:a>Margje</naam:a>
<naam:b>Daisyree</naam:b>
<naam:c>Elke</naam:c>
</kennis>
<kennis>
<naam:a>Bas</naam:a>
<naam:b>Ruben</naam:b>
<naam:c>Wessel</naam:c>
</kennis>
</example>';
$sxe = new SimpleXMLElement($xml);
$i=0;
foreach($sxe->kennis as $kennis) {
$kids = $sxe->kennis[$i]->children('naam', TRUE);
$a = $kids->a ;
$b = $kids->b;
$c = $kids->c;
echo "naam a = $a <br>";
echo "naam b = $b <br>";
echo "naam c = $c <br>";
echo "<br><br>";
$i++;
}
echo "<br>";
?>
De stuctuur ziet er echter zo uit :
<example xmlns:mel="link" xmlns:naam="verwijzing" >
<mel:meldtGeboorte>
<kennis>
<naam:a>Margje</naam:a>
<naam:b>Daisyree</naam:b>
<naam:c>Elke</naam:c>
</kennis>
<kennis>
<naam:a>Bas</naam:a>
<naam:b>Ruben</naam:b>
<naam:c>Wessel</naam:c>
</kennis>
</mel:meldtGeboorte>
</example>
Hoe moet ik de tag <mel:meldtGeboorte> beschrijven/toevoegen in mijn code om bovenstaand resultaat te bereiken. Ik krijg het niet voor elkaar.
Kan iemand mij hierbij helpen. Alvast bedankt.
Ik was tot voorkort niet bekend met xml maar kom er een heel eind uit.
De structuur en de php-code zoals hier levert het gewenste resultaat op.
<?php
$xml = '<example xmlns:mel="link" xmlns:naam="verwijzing" xmlns:kind="my.foo.urn">
<kennis>
<naam:a>Margje</naam:a>
<naam:b>Daisyree</naam:b>
<naam:c>Elke</naam:c>
</kennis>
<kennis>
<naam:a>Bas</naam:a>
<naam:b>Ruben</naam:b>
<naam:c>Wessel</naam:c>
</kennis>
</example>';
$sxe = new SimpleXMLElement($xml);
$i=0;
foreach($sxe->kennis as $kennis) {
$kids = $sxe->kennis[$i]->children('naam', TRUE);
$a = $kids->a ;
$b = $kids->b;
$c = $kids->c;
echo "naam a = $a <br>";
echo "naam b = $b <br>";
echo "naam c = $c <br>";
echo "<br><br>";
$i++;
}
echo "<br>";
?>
De stuctuur ziet er echter zo uit :
<example xmlns:mel="link" xmlns:naam="verwijzing" >
<mel:meldtGeboorte>
<kennis>
<naam:a>Margje</naam:a>
<naam:b>Daisyree</naam:b>
<naam:c>Elke</naam:c>
</kennis>
<kennis>
<naam:a>Bas</naam:a>
<naam:b>Ruben</naam:b>
<naam:c>Wessel</naam:c>
</kennis>
</mel:meldtGeboorte>
</example>
Hoe moet ik de tag <mel:meldtGeboorte> beschrijven/toevoegen in mijn code om bovenstaand resultaat te bereiken. Ik krijg het niet voor elkaar.
Kan iemand mij hierbij helpen. Alvast bedankt.
Daarin definieer je namespaces alias welke in de descendants gebruikt kunnen worden. In dit geval de alias mel welke de namespace link is en de alias naam welke verwijst naar de namespace verwijzing.
Om deze elementen op te halen vragen we eerst alle elementen van dat namespace op die descendants zijn van het huidige element en vervolgens kunnen we het juiste child selecteren:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$xml = <<<EOX
<example xmlns="..." xmlns:book="http://example.org/schema/dic/book">
<book>
<book:title>Foobar</book:title>
<book:author>Wouter J</book:author>
<!-- ... -->
</book>
</example>
EOX
;
$sxml = new SimpleXmlElement($xml);
foreach ($sxml->book as $book) {
$bookMetadata = $book->chidren('http://example.org/schema/dic/book');
echo $bookMetadata->author.' heeft het boek "'.$bookMetadata->title.'" geschreven';
}
?>
$xml = <<<EOX
<example xmlns="..." xmlns:book="http://example.org/schema/dic/book">
<book>
<book:title>Foobar</book:title>
<book:author>Wouter J</book:author>
<!-- ... -->
</book>
</example>
EOX
;
$sxml = new SimpleXmlElement($xml);
foreach ($sxml->book as $book) {
$bookMetadata = $book->chidren('http://example.org/schema/dic/book');
echo $bookMetadata->author.' heeft het boek "'.$bookMetadata->title.'" geschreven';
}
?>
Gewijzigd op 07/07/2013 22:41:44 door Wouter J
Jouw reactie heeft me aan het denken gezet en heb mijn code aangepast. Ik heb er zeker wat aan gehad, echter is mijn vraag niet beantwoord. Na de eerste tag (met namespace declaraties) komt in werkelijkheid een tag met een namespace. Zie de xml-structuur in het laatste stuk van mijn topic hierboven. Voor mijn foreach loop moet m.i. nog iets worden gecodeerd. Maar wat ?
mijn code is inmiddels :
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
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
<?php
$xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:mel="http://www.ienr.org/schemas/services/meldingenWS_v2_0"
xmlns:mel1="http://www.ienr.org/schemas/types/meldingen_v2_0">
<mel:vastleggenGeboorteMelding>
<request>
<mel1:a>Margje</mel1:a>
<mel1:b>Daisyree</mel1:b>
<mel1:c>Elke</mel1:c>
</request>
<request>
<mel1:a>Bas</mel1:a>
<mel1:b>Ruben</mel1:b>
<mel1:c>Wessel</mel1:c>
</request>
</mel:vastleggenGeboorteMelding>
</soapenv:Envelope>';
$sxe = new SimpleXMLElement($xml);
/*$mel = $......
OF
foreach($sxe->........)
*/
foreach($sxe->request as $mel1) {
$mel1data = $mel1->children('http://www.ienr.org/schemas/types/meldingen_v2_0');
echo $mel1data->a.'<br>';
echo $mel1data->b.'<br>';
echo $mel1data->c.'<br>';
echo '<br>';
}
echo "<br>";
?>
$xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:mel="http://www.ienr.org/schemas/services/meldingenWS_v2_0"
xmlns:mel1="http://www.ienr.org/schemas/types/meldingen_v2_0">
<mel:vastleggenGeboorteMelding>
<request>
<mel1:a>Margje</mel1:a>
<mel1:b>Daisyree</mel1:b>
<mel1:c>Elke</mel1:c>
</request>
<request>
<mel1:a>Bas</mel1:a>
<mel1:b>Ruben</mel1:b>
<mel1:c>Wessel</mel1:c>
</request>
</mel:vastleggenGeboorteMelding>
</soapenv:Envelope>';
$sxe = new SimpleXMLElement($xml);
/*$mel = $......
OF
foreach($sxe->........)
*/
foreach($sxe->request as $mel1) {
$mel1data = $mel1->children('http://www.ienr.org/schemas/types/meldingen_v2_0');
echo $mel1data->a.'<br>';
echo $mel1data->b.'<br>';
echo $mel1data->c.'<br>';
echo '<br>';
}
echo "<br>";
?>
Gewijzigd op 08/07/2013 22:29:37 door Bas van de Ven
Code (php)
1
2
3
2
3
<?php
$mels = $sxe->children("http://www.ienr.org/schemas/services/meldingenWS_v2");
?>
$mels = $sxe->children("http://www.ienr.org/schemas/services/meldingenWS_v2");
?>
En dan vraag je het vastleggenGeboorteMelding element op:
Met comando var_dump(count($rij)); wordt bevestigd dat namespace mel 1 x bestaat.
Ik zit nu dus in het element vastleggenGeboorteMelding. Maar nu ?
Ik probeer van alles maar de zes namen krijg ik niet in beeld. Via google kan ik ook niets gevonden krijgen wat me kan helpen.
Overigens, m.i. is element request een child van vastleggenGeboorteMelding.
Weet iemand hoe ik binnen <mel:vastleggenGeboorteMelding> <request> kan aanroepen ?
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
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
<?php
$xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:mel="http://www.ienr.org/schemas/services/meldingenWS_v2_0"
xmlns:mel1="http://www.ienr.org/schemas/types/meldingen_v2_0">
<mel:vastleggenGeboorteMelding>
<request>
<mel1:a>Margje</mel1:a>
<mel1:b>Daisyree</mel1:b>
<mel1:c>Elke</mel1:c>
</request>
<request>
<mel1:a>Bas</mel1:a>
<mel1:b>Ruben</mel1:b>
<mel1:c>Wessel</mel1:c>
</request>
</mel:vastleggenGeboorteMelding>
</soapenv:Envelope>';
$sxe = new SimpleXMLElement($xml);
$mels = $sxe->children("http://www.ienr.org/schemas/services/meldingenWS_v2_0");
$rij = $mels->vastleggenGeboorteMelding;
var_dump(count($rij));
#GEEFT 0 ELEMENTEN $rt = $rij->children; var_dump(count($rt));
#FOUT $rt = $rij->request->children("http://www.ienr.org/schemas/types/meldingen_v2_0");
foreach($rij->request as $mel1) {
$mel1data = $mel1->children('http://www.ienr.org/schemas/types/meldingen_v2_0');
echo $mel1data->a.'<br>';
echo $mel1data->b.'<br>';
echo $mel1data->c.'<br>';
echo '<br>';
}
echo "<br>";
?>
$xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:mel="http://www.ienr.org/schemas/services/meldingenWS_v2_0"
xmlns:mel1="http://www.ienr.org/schemas/types/meldingen_v2_0">
<mel:vastleggenGeboorteMelding>
<request>
<mel1:a>Margje</mel1:a>
<mel1:b>Daisyree</mel1:b>
<mel1:c>Elke</mel1:c>
</request>
<request>
<mel1:a>Bas</mel1:a>
<mel1:b>Ruben</mel1:b>
<mel1:c>Wessel</mel1:c>
</request>
</mel:vastleggenGeboorteMelding>
</soapenv:Envelope>';
$sxe = new SimpleXMLElement($xml);
$mels = $sxe->children("http://www.ienr.org/schemas/services/meldingenWS_v2_0");
$rij = $mels->vastleggenGeboorteMelding;
var_dump(count($rij));
#GEEFT 0 ELEMENTEN $rt = $rij->children; var_dump(count($rt));
#FOUT $rt = $rij->request->children("http://www.ienr.org/schemas/types/meldingen_v2_0");
foreach($rij->request as $mel1) {
$mel1data = $mel1->children('http://www.ienr.org/schemas/types/meldingen_v2_0');
echo $mel1data->a.'<br>';
echo $mel1data->b.'<br>';
echo $mel1data->c.'<br>';
echo '<br>';
}
echo "<br>";
?>
Gewijzigd op 15/07/2013 19:38:19 door Bas van de Ven