xml parsen

04/12/2013 - 16:48 von Jan Novak | Report spam
Hallo,

bin einfach zu blöd das hier zu lösen:
Ich habe zum Beispiel diese XML Datei:

<?xml version="1.0"?>
<?xml-stylesheet href="file:///usr/bin/../share/nmap/nmap.xsl"
type="text/xsl"?>
<host><status state="down" reason="no-response" reason_ttl="0"/>
<address addr="192.168.0.0" addrtype="ipv4"/>
</host>
<host><status state="up" reason="arp-response" reason_ttl="0"/>
<address addr="192.168.0.5" addrtype="ipv4"/>
<address addr="C8:BE:19:8B:09:5E" addrtype="mac" vendor="D-Link
International"/>
<hostnames>
</hostnames>
<times srtt="411" rttvar="5000" to="100000"/>
</host>


aus welcher ich nur und ausschliesslich die MAC Adresse brauche.
Manchmal gibt es auch keine, wie auch immer.
Damit funktioniert es nicht:


$xml = simplexml_load_file('myout.xml');
echo $xml->addr[1];

Wie heisst der Ast, wo die MAC Adresse steht ?


Jan
 

Lesen sie die antworten

#1 Stefan+Usenet
04/12/2013 - 17:40 | Warnen spam
On Wed, 04 Dec 2013 16:48:55 Jan Novak wrote:
Ich habe zum Beispiel diese XML Datei:

<?xml version="1.0"?>
<?xml-stylesheet href="file:///usr/bin/../share/nmap/nmap.xsl"
type="text/xsl"?>
<host><status state="down" reason="no-response" reason_ttl="0"/>
<address addr="192.168.0.0" addrtype="ipv4"/>
</host>
<host><status state="up" reason="arp-response" reason_ttl="0"/>
<address addr="192.168.0.5" addrtype="ipv4"/>
<address addr="C8:BE:19:8B:09:5E" addrtype="mac" vendor="D-Link
International"/>
<hostnames>
</hostnames>
<times srtt="411" rttvar="5000" to="100000"/>
</host>

aus welcher ich nur und ausschliesslich die MAC Adresse brauche.
Manchmal gibt es auch keine, wie auch immer.
Damit funktioniert es nicht:

$xml = simplexml_load_file('myout.xml');
echo $xml->addr[1];

Wie heisst der Ast, wo die MAC Adresse steht ?



So einfach geht das nicht - ich hoffe, Du hast Einfluss auf die Quelldatei.
Diese benoetigt naemlich jedenfalls einmal ein Root-Element (welches nur 1x
vorkommen darf), d.h. Du musst die Host-Liste beispielsweise in ein
<hosts>...</hosts> einschliessen.

Danach kannst Du mit z.B.

| $xml->host[1]->addr[1]

...auf den zweiten Adress-Satz im zweiten Host zugreifen (und muesstest
dann nachsehen, ob der einen Eintrag fuer eine Mac-Adresse hat).

Eleganter ist das wohl mit xpath, beispielsweise:

| $xml = simplexml_load_file('test.xml');
|
| $result = $xml->xpath("//address[@addrtype='mac']");
| foreach ($result as $item) {
| echo $item->attributes()->addr . "";
| }

Servus,
Stefan

http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Stefan - endlich ein kàssiger Gedanke.
(Sloganizer)

Ähnliche fragen