| 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: 11 let
|
|||
0