PHP 解析有命名空间的 XML

本文介绍了一个用于解析XML文件中命名空间并将其转换为数组的PHP函数。通过正则表达式替换命名空间符号,并利用simplexml库加载XML字符串,最后将解析后的XML对象转为数组,实现高效的数据处理。
function parseNamespaceXml($xmlstr)
{
    $xmlstr = preg_replace('/\sxmlns="(.*?)"/', ' _xmlns="${1}"', $xmlstr);
    $xmlstr = preg_replace('/<(\/)?(\w+):(\w+)/', '<${1}${2}_${3}', $xmlstr);
    $xmlstr = preg_replace('/(\w+):(\w+)="(.*?)"/', '${1}_${2}="${3}"', $xmlstr);
    $xmlobj = simplexml_load_string($xmlstr);
    return json_decode(json_encode($xmlobj), true);
}

$xmlstr = '<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
  <item>
    <title>My Title</title>
    <description>My Item</description>
    <dc:publisher>ABC</dc:publisher>
    <dc:creator>DEF</dc:creator>
    <dc:date>2009-02-12T16:53:25Z</dc:date>
  </item>
</channel>
</rss>';

$arr = parseNamespaceXml($xmlstr);

print_r($arr);
实际上,以上处理只是把命名空间的冒号(:)变换为下划线(_),同时把解析结果变换成数组。
数组变换用到一点小技巧,就是通过 json_encode 和 json_decode 来实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值