我有这个奇怪的问题,我必须读取存储在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?
答案 0 :(得分:0)
特别是没有正确阅读的内容? SimpleXML对象包含XML中的所有数据。
您可以将对象转换为数组,以便更容易使用,如下所示:
$json_string = json_encode($infoXML);
$result_array = json_decode($json_string, TRUE);
答案 1 :(得分:0)
在尝试了一些事情之后,我切换了我的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数组,如果你只想要内部值,那么非常有用:)