Я как бы застрял в захвате группы с preg_match()
в php.
Это моя модель:
<ns2:uniqueIds>(.*)<\/ns2:uniqueIds>
И это источник:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Header/><env:Body><ns2:ListResponse xmlns:ns2="http://censored"><ns2:uniqueIds>censored</ns2:uniqueIds><ns2:uniqueIds>censored</ns2:uniqueIds></ns2:ListResponse></env:Body></env:Envelope>
Что мне не хватает?
Хотя я согласен с людьми выше, которые говорят вам не использовать регулярные выражения для синтаксического анализа XML, я могу понять, почему вы делаете это, чтобы просто получить некоторую ценность. Так мне удалось заставить его работать:
Пример интерпретатора PHP:
php > $s = '<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Header/><env:Body><ns2:ListResponse xmlns:ns2="http://censored"><ns2:uniqueIds>censored</ns2:uniqueIds><ns2:uniqueIds>censored</ns2:uniqueIds></ns2:ListResponse></env:Body></env:Envelope>'; php > $p = '#<ns2:uniqueIds>(.*?)<\/ns2:uniqueIds>#i'; php > $a = array(); php > preg_match($p, $s, $a); php > print_r($a); Array ( [0] => <ns2:uniqueIds>censored</ns2:uniqueIds> [1] => censored )
Единственные изменения, которые я внес в ваш шаблон, это то, что я использовал ленивый квантификатор *? а не просто * (что жадно).
Источники:
Вероятно, вы должны использовать родной SoapClient, чтобы упростить как вызов WebService, так и получение результата в качестве собственного типа данных PHP.
Использование регулярных выражений для синтаксического анализа XML или HTML обычно является (очень) плохой идеей.