我有一個非常大的文件,我需要在php中解析,所以我使用的是xmlReader。我剛開始使用XML玩弄和我有一些問題....PHP中的xmlReader-使它正常工作的問題
這裏是XML是如何構成的?
<?xml version="1.0" encoding="utf-8"?>
<devices>
<os name="os1">
<device user_agent="uaValue1">
<device_name>name1</device_name>
<device_os>osValue1</device_os>
</device>
<device user_agent="uaValue2">
<device_name>name2</device_name>
<device_os>osValue2</device_os>
</device>
</os>
<os name="os2">
<device user_agent="uaValue3">
<device_name>name3</device_name>
<device_os>osValue5</device_os>
</device>
<device user_agent="uaValue4">
<device_name>name4</device_name>
<device_os>osValue4</device_os>
</device>
</os>
<manufacturer name="mf1">
<device user_agent="uaValue5">
<device_name>name5</device_name>
<device_os>osValue5</device_os>
</device>
<device user_agent="uaValue6">
<device_name>name6</device_name>
<device_os>osValue6</device_os>
</device>
</manufacturer>
<manufacturer name="mf2">
<device user_agent="uaValue7">
<device_name>name7</device_name>
<device_os>osValue7</device_os>
</device>
<device user_agent="uaValue8">
<device_name>name8</device_name>
<device_os>osValue8</device_os>
</device>
</manufacturer>
</devices>
我嘗試使用下面的函數讀取xml(其中$ findby將通過os或製造商/ $ atr_value是$ findby值的屬性名稱/ $ ua_str是用戶代理)。
function get_data($findby,$atr_value,$ua_str) {
$data['device_name'] = '';
$data['device_os'] = '';
$xml = new XMLReader;
$xml->open('devices.xml');
while($xml->read()) {
if ($xml->name == $findby) {
if ($xml->getAttribute('name') == $atr_value) {
while($xml->read()) {
if ($xml->name == "device") {
if ($xml->getAttribute('user_agent') == $ua_str) {
while($xml->read()) {
if ($xml->name == "device_name") {
$data['device_name'] = $xml->value;
}
if ($xml->name == "device_os") {
$data['device_os'] = $xml->value;
}
}
}
}
}
}
}
}
$xml->close();
return $data;
}
通過在這裏和那裏呼應幾個值,好像拉下來的數據向用戶代理,但不會獲取DEVICE_NAME或device_os。
顯然,這是行不通的。我在想這個XML不能以這種方式構建,這可能是問題,也是一個簡單的解決方法。但是,在我之前的版本中,它拉取了數據,但它來自錯誤的用戶代理。所以我認爲這是我試圖用xmlReader獲取數據的東西。
有沒有人有任何想法,爲什麼這不起作用?謝謝...
謝謝...,幫助 – user1366187