Autor | Zpráva | ||
---|---|---|---|
Pavlínka Profil |
#1 · Zasláno: 25. 12. 2015, 14:21:54
dělám si vlastní statistiky vytížení serveru (nechce se mi používat munina a další jen kůli sledování netu....)
nainstalovala jsem si tada na server vnstat... umí krásně generovat XML z kterého si vytahuji data... nyní jsem ale měnila server a setkala jsem se tam s "id=" a nevede se mi z něj dostat data... xml vypadá nějak takto: <interface id="eth1"> <traffic> <total> <rx>0</rx> ..... <interface id="eth0"> <traffic> <total> <rx>333</rx> ..... na mém starém serveru byla hodnota rx jako první... tak jsem to nikdy neřešila :D nyní ale při mé smůle potřebuji vytahnout hodnotu eth0 jak tedy upřesnit "výtah" podle ID? ... foreach ($xml->interface->traffic->total as $item){ $totaltrafic = $item->rx; ... |
||
Alphard Profil |
#2 · Zasláno: 25. 12. 2015, 18:36:20
Předpokládám, že se dokument zpracovává pomocí SimpleXMLElement. Interní reprezentace xml neobsahuje přímé reference na atributy, takže je třeba projít danou skupinu tagů a najít ten správný.
1. Jsou v podstatě dvě možnosti, první je iterovat přes <interface> , pomocí SimpleXMLElement::attributes zjišťovat atributy a ten správný zpracovat.
2. Protože podobná věc je potřeba častěji, byl vytvořen jazyk XPath, který umožňuje adresovat část XML stromu. Najít libovolně zanořený tag interface s id rovným eth0 by mělo jít pomocí dotazu //interface[@id="eth0"] . Daný dotaz lze vyhledat pomocí SimpleXMLElement::xpath.
|
||
Pavlínka Profil |
#3 · Zasláno: 25. 12. 2015, 18:45:22
na to jsem koukala ale úplně moudrá jsem z toho nebyla... v "ukázkách" je vždy pouze jedna "proměnná" zde mám ale strom 4... interface->traffic->total->rx
|
||
Alphard Profil |
#4 · Zasláno: 25. 12. 2015, 19:05:35
$source = '<xml> <interface id="eth1"> <traffic> <total> <rx>0</rx> </total> </traffic> </interface> <interface id="eth0"> <traffic> <total> <rx>333</rx> </total> </traffic> </interface> </xml>'; $tree = simplexml_load_string($source); $interface = $tree->xpath('//interface[@id="eth0"]')[0]; echo (string) $interface->traffic->total->rx; // 333 |
||
Časová prodleva: 8 let
|
0