获取存储在mySQL上的完整XML结构


Get complete XML structure stored on mySQL

我有一个奇怪的问题,我必须读取存储在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数组,如果你只想要内部值,这非常有用:)