namespaces in xml tag

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas van de Ven

Bas van de Ven

07/07/2013 22:16:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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.
 
PHP hulp

PHP hulp

27/04/2024 02:41:54
 
Wouter J

Wouter J

07/07/2013 22:41:13
Quote Anchor link
xmlns = XML NameSpace

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)
PHP script in nieuw venster Selecteer het PHP script
1
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';
}

?>
Gewijzigd op 07/07/2013 22:41:44 door Wouter J
 
Bas van de Ven

Bas van de Ven

08/07/2013 22:27:35
Quote Anchor link
Bedankt Wouter,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>";
?>
Gewijzigd op 08/07/2013 22:29:37 door Bas van de Ven
 
Wouter J

Wouter J

08/07/2013 23:13:14
Quote Anchor link
$sxe bevat nu het root element (soapenv:Envelope). Je moet eerst in de "mel namespace" komen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$mels
= $sxe->children("http://www.ienr.org/schemas/services/meldingenWS_v2");
?>

En dan vraag je het vastleggenGeboorteMelding element op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$mels
->vastleggenGeboorteMelding;
?>
 
Bas van de Ven

Bas van de Ven

09/07/2013 20:10:40
Quote Anchor link
En als het element is opgevraagd hoe roep ik dan de tag request aan ?

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>";
?>
 
Bas van de Ven

Bas van de Ven

14/07/2013 21:58:54
Quote Anchor link
Heeft er niemand een idee hoe ik binnen het element mel:vastleggenGeboorteMelding het element request kan aanroepen. Ik krijg (hoogstens) geen foutmeldingen maar ook geen (verwachte) persoonsnamen te zien. Ik krijg het niet voor elkaar. Kan iemand mij verder helpen ?
Gewijzigd op 15/07/2013 19:38:19 door Bas van de Ven
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.