[XML] Hoe de waarde terugkrijgen van specifiek XML-element

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Geluidsgoeroe
  • Registratie: Mei 2021
  • Laatst online: 04-02-2022
Stel, ik heb deze data in gegevens.xml staan:
code:
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
<?xml version="1.0"?>  
        <stats>
    <gegevens1>lorem<gegevens1>
    <gegevens2>ipsum<gegevens2>
    <source mount="/abc">
        <ding>1.0</ding>
        <ietsanders>10</ietsanders>
        <dezeisbelangrijk>12345</dezeisbelangrijk>
        <meer>Woord</meer>
    </source>
    <source mount="/def">
        <ding>1.0</ding>
        <ietsanders>10</ietsanders>
        <dezeisbelangrijk>23456</dezeisbelangrijk>
        <meer>Woord</meer>
    </source>
    <source mount="/ghi">
        <ding>1.0</ding>
        <ietsanders>10</ietsanders>
        <dezeisbelangrijk>34567</dezeisbelangrijk>
        <meer>Woord</meer>
    </source>
    <source mount="/jkl">
        <ding>1.0</ding>
        <ietsanders>10</ietsanders>
        <dezeisbelangrijk>45678</dezeisbelangrijk>
        <meer>Woord</meer>
    </source>
</stats>


Van <source mount="/ghi"> wil ik weten wat er in <dezeisbelangrijk> staat, en dit weergeven op een webpagina.
Dat kan ik doen op deze manier:

code:
1
2
3
4
<?php
$xml=simplexml_load_file("gegevens.xml") or die("Error: Cannot create object");
echo $xml->source[3]->dezeisbelangrijk;
?>


Ik geef hierbij aan dat hiervoor de derde <source> gepakt moet worden. Dit werkt prima. Totdat er een <source> bij komt, en de nummering niet meer klopt, waardoor ik wel een <dezeisbelangrijk> in beeld krijg, maar van een andere source mount dan de gewenste <source mount="/ghi">.

Hoe kan ik specificeren dat altijd voor <dezeisbelangrijk> van dus heel specifiek <source mount="/ghi"> gekozen moet worden?

Dank.

[ Voor 6% gewijzigd door Geluidsgoeroe op 30-01-2022 20:42 . Reden: XML-tekst verbeterd ]

Alle reacties


Acties:
  • +3 Henk 'm!

  • azerty
  • Registratie: Maart 2009
  • Laatst online: 17-09 08:24
Kijk eens naar wat XPATH kan doen voor jou :)

Edit: Je moet dan wel mogelijk een correct root element in je XML document zetten, want de huidige code is niet volledig geldig ;)

Edit2: of wat @Creepy zegt natuurlijk :)

[ Voor 70% gewijzigd door azerty op 29-01-2022 22:19 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer

Of loop simpelweg door alle source's heen totdat je de juiste hebt gevonden?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Geluidsgoeroe
  • Registratie: Mei 2021
  • Laatst online: 04-02-2022
azerty schreef op zaterdag 29 januari 2022 @ 22:03:
Kijk eens naar wat XPATH kan doen voor jou :)

Edit: Je moet dan wel mogelijk een correct root element in je XML document zetten, want de huidige code is niet volledig geldig ;)

Edit2: of wat @Creepy zegt natuurlijk :)
XML aangepast. Lijkt nu meer op het origineel. Nu XPATH aan het bekijken. Dank.
Creepy schreef op zaterdag 29 januari 2022 @ 22:18:
Of loop simpelweg door alle source's heen totdat je de juiste hebt gevonden?
Dat zou briljant zijn. Maar zou niet weten hoe :$ *hobbyist

Acties:
  • +1 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Geluidsgoeroe schreef op zaterdag 29 januari 2022 @ 22:38:
Dat zou briljant zijn. Maar zou niet weten hoe :$ *hobbyist
Read The Fine Manual ;)
https://www.php.net/manua...xmlelement.attributes.php

[ Voor 6% gewijzigd door DJMaze op 29-01-2022 22:48 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • azerty
  • Registratie: Maart 2009
  • Laatst online: 17-09 08:24
Geluidsgoeroe schreef op zaterdag 29 januari 2022 @ 22:38:
[...]

XML aangepast. Lijkt nu meer op het origineel. Nu XPATH aan het bekijken. Dank.
Had het gisteren met een fictief root-element uitgeprobeerd, en is normaal gezien vrij triviaal qua XPath query :)

Acties:
  • 0 Henk 'm!

  • Geluidsgoeroe
  • Registratie: Mei 2021
  • Laatst online: 04-02-2022
Ik kon niet toe met "hier staat de handleiding", en heb het elders uitgelegd gekregen.

Voor anderen die iets vergelijkbaars willen doen, via de zoekfunctie hier terecht zijn gekomen, en gewoon een voorbeeld nodig hebben... Hier twee manieren om het te doen:

code:
1
2
3
4
5
6
7
8
9
<?php
    $xml=simplexml_load_file("gegevens.xml") or die("Error: Cannot create object");
    foreach($xml->source as $source){
        if($source['mount'] == '/ghi'){
            echo $source->dezeisbelangrijk;
            break;
        }
    }
?>



code:
1
2
3
4
5
6
7
<?php
    $xml=simplexml_load_file("gegevens.xml") or die("Error: Cannot create object");
    $data = $xml->xpath('/stats/source[@mount="/ghi"]/dezeisbelangrijk'); 
    foreach ($data as $belangrijk){
        echo 'Belangrijk: ', $belangrijk, "\n";
    }
?>



Mocht het verbeterbaar zijn, dan hoor ik dat graag. Maar voor nu werkt dit voor mij i.i.g.
Pagina: 1