Php xml xpath, как извлечь требуемое соответствие

У меня вопрос о том, как получить доступ к SourceUrl для изображения с шириной = 400

Изображения/ди /47/6b/77/454430384d6d324b413332544a695675313851-400x400-0-0.jpg? р = p2.7f19fe93a466ae45afab & а = 1 & с = 1 & л = 7000610 & г = 1 & пр = 1 & LKS = 43998 & FKS = 35198

По умолчанию он показывает мне изображение с шириной = 100, и каким-то образом мой синтаксис xpath не набирает 400

<!--?php
$string = <<<XML
<imageList-->

 <sourceurl>images/di/47/6b/77/454430384d6d324b413332544a695675313851-100x100-0-0.jpg?p=p2.7f19fe93a466ae45afab&a=1&c=1&l=7000610&r=1&pr=1&lks=43998&fks=35198</sourceurl>

<sourceurl>images/di/47/6b/77/454430384d6d324b413332544a695675313851-200x200-0-0.jpg?p=p2.7f19fe93a466ae45afab&a=1&c=1&l=7000610&r=1&pr=1&lks=43998&fks=35198</sourceurl>
<sourceurl>images/di/47/6b/77/454430384d6d324b413332544a695675313851-300x300-0-0.jpg?p=p2.7f19fe93a466ae45afab&a=1&c=1&l=7000610&r=1&pr=1&lks=43998&fks=35198</sourceurl>
<sourceurl>images/di/47/6b/77/454430384d6d324b413332544a695675313851-400x400-0-0.jpg?p=p2.7f19fe93a466ae45afab&a=1&c=1&l=7000610&r=1&pr=1&lks=43998&fks=35198</sourceurl>
<sourceurl>images/di/47/6b/77/454430384d6d324b413332544a695675313851-500x569-0-0.jpg?p=p2.7f19fe93a466ae45afab&a=1&c=1&l=7000610&r=1&pr=1&lks=43998&fks=35198</sourceurl>
XML;


$xml = simplexml_load_string($string); 

$result = $xml->xpath("//image[@height='400']/sourceURL");



?>
1 ответ

Ваш xpath в порядке, но XML недействителен, см. Http://www.xmlvalidation.com & Внутри ваших ссылок будет анализироваться как начало символьной сущности → ошибка.

Решение: исключить текст в из разбора с помощью :

$x = <<<xml <imagelist="">

 <sourceurl>
 <!--[CDATA[images/di/47/6b/77/454430384d6d324b413332544a695675313851-100x100-0-0.jpg?p=p2.7f19fe93a466ae45afab&a=1&c=1&l=7000610&r=1&pr=1&lks=43998&fks=35198]]-->
 </sourceurl>

...

XML;

$xml = simplexml_load_string($x);
$result = $xml->xpath("//image[@height='400']/sourceURL")[0];
echo $result;
</xml>

выход:

images/di/47/6b/77/454430384d6d324b413332544a695675313851-400x400-0-0.jpg?p=p2.7f19fe93a466ae45afab&a=1&c=1&l=7000610&r=1&pr=1&lks=43998&fks=35198

см. его работу: http://codepad.viper-7.com/31PLr3

подробнее на CDATA: Что означает в XML?

licensed under cc by-sa 3.0 with attribution.