douwei1930 2010-09-22 10:26
浏览 34
已采纳

如何用PHP解析eXist XQuery响应?

I am trying to find an easy way to parse an eXist response with php without installing third party classes.

This is the type of response that I would like to parse :

<exist:result xmlns:exist="http://exist.sourceforge.net/NS/exist">
  <exist:collection name="xData" path="/db/SBXXX/00000000-00000000/sapData" created="2010-07-15T16:12:09.135-05:00">
    <exist:resource name="xDataData1.xml" size="1565" created="1969-12-31T18:00:00.000-06:00" last-modified="2010-09-20T23:42:09.584-05:00"/>
    <exist:resource name="xDataData10.xml" size="805" created="1969-12-31T18:00:00.000-06:00" last-modified="2010-09-21T01:27:09.614-05:00"/>
    <exist:resource name="xDataData11.xml" size="806" created="1969-12-31T18:00:00.000-06:00" last-modified="2010-09-21T01:27:22.005-05:00"/>
    <exist:resource name="xDataData12.xml" size="1565" created="1969-12-31T18:00:00.000-06:00" last-modified="2010-09-21T01:42:15.768-05:00"/>
    <exist:resource name="xDataData13.xml" size="805" created="1969-12-31T18:00:00.000-06:00" last-modified="2010-09-21T01:57:09.749-05:00"/>
  </exist:collection>
</exist:result>

I am trying with the simplexml_load_string php function but I get back an empty SimpleXMLElement object with no errors.

I would like to get out of this response the list of XML files.

Thanks

  • 写回答

2条回答 默认 最新

  • dongpalou5352 2010-09-22 11:01
    关注

    Using DOMDocument and DOMXPath is the most "correct" way to access those attributes:

    $xml = '<exist:result xmlns:exist="http://exist.sourceforge.net/NS/exist">
      <exist:collection name="xData">
        <exist:resource name="xDataData1.xml"/>
        <exist:resource name="xDataData10.xml"/>
      </exist:collection>
    </exist:result>
    ';
    
    $dom = DOMDocument::loadXML($xml);
    $xpath = new DOMXPath($dom);
    $xpath->registerNamespace('exist', 'http://exist.sourceforge.net/NS/exist');
    
    $nodes = $xpath->query('exist:collection/exist:resource');
    if (!$nodes->length)
      exit('No nodes found');
    
    $items = array();
    foreach ($nodes as $node)
      $items[] = $node->getAttribute('name');
    
    print_r($items);
    

    Which produces this:

    Array
    (
        [0] => xDataData1.xml
        [1] => xDataData10.xml
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 vue2登录调用后端接口如何实现