我有一个奇怪的问题,我必须读取存储在mySQL数据库中的XML结构,像这样:
<geocercaPoligonal>
<nombreGeocerca>Kennedy</nombreGeocerca>
<longitud>-79.89726930856705</longitud>
<latitud>-2.1599807309506396</latitud>
<longitud>-79.9029341340065</longitud>
<latitud>-2.172760363061884</latitud>
</geocercaPoligonal>
当我在PHP上得到查询(使用PDO Fetch:Assoc)并输出结果时,结果如下:
' Kennedy -79.89726930856705 -2.1599807309506396 -2.172760363061884 -79.9029341340065 '
所有标签都被省略,这导致读取此数据时出现错误,我必须从特定标签中获取值,我得到一个XML加载字符串
DB::getRow是一个准备/执行PDO函数
$geocerca = DB::getRow('SELECT * FROM GeocercasxUsuario WHERE IdGeocerca = :IdGeocerca', ['IdGeocerca' => $IdGeocerca]);
$infoXML = simplexml_load_string($geocerca['InformacionGeografica']);
//The field from the database with the XML string
它得到这个信息
SimpleXMLElement::__set_state(array(
'nombreGeocerca' => 'Kennedy',
'longitud' => array(
0 => '-79.89726930856705',
1 => '-2.172760363061884',
),
'latitud' => array(
0 => '-2.1599807309506396',
1 => '-79.9029341340065',
),
))
它不能正确读取XML结构,我该如何解决这个问题?是PHP还是mySQL?
哪些内容没有被正确读取?SimpleXML对象包含XML中的所有数据。
您可以将对象转换为数组,这样更容易操作,如下所示:
$json_string = json_encode($infoXML);
$result_array = json_decode($json_string, TRUE);
在尝试了一些事情之后,我切换了我的select语句以获得特定的XML数据,如下所示:
代替
SELECT * FROM GeocercasxUsuario WHERE IdUsuario = n (just for example)
我改成
SELECT ExtractValue(InformacionGeografica,'/geocercaPoligonal/latitud') AS Latitud, ExtractValue(InformacionGeografica,'/geocercaPoligonal/longitud') AS Longitud, ...(other fields)... FROM GeocercasxUsuario WHERE IdUsuario = n
这样我就得到了每个标签值的XML数组,如果你只想要内部值,这非常有用:)