【问题标题】:Get complete XML structure stored on mySQL获取存储在 mySQL 上的完整 XML 结构
【发布时间】:2016-07-04 02:37:29
【问题描述】:

我有一个奇怪的问题,我必须读取存储在 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 的东西?

【问题讨论】:

    标签: php mysql xml


    【解决方案1】:

    什么特别是没有被正确阅读? SimpleXML 对象包含 XML 中的所有数据。

    您可以将对象转换为数组,这样使用起来更容易,如下所示:

    $json_string = json_encode($infoXML);    
    $result_array = json_decode($json_string, TRUE);
    

    【讨论】:

    • 错了,可以看到'longitud'第一个值是对的,但是第二个值对应'latitud',不尊重排序
    • @Forcefield 可以看到$geocerca['InformacionGeografica']的内容吗?
    • 它是我问题的第一个代码块,这就是我想要获取数据的顺序:P
    • 一定有一个错误,sn-p 对我来说很好用:i.imgur.com/ElnOJcC.jpg
    • 如果我做同样的输入作为字符串它工作正常,但是当从数据库中获取数据时它崩溃:(
    【解决方案2】:

    在尝试了一些事情之后,我切换了我的 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 数组,如果你只想要内部值,这非常有用:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 2020-03-03
      相关资源
      最近更新 更多