Я хочу получить все слова между тегами XML из массива и текущий результат:
Примечание: преобразование массива в строку в …….. в строке 84
Результат: массив
if(isset($_POST['send']))
{
echo "sync is started <br>";
$handle = fopen("XML/$file_name", "r");
if ($handle)
{
while (($line = fgets($handle)) !== false)
{
$keywords=array("series_title","series_type","series_episodes");
for ($i=0; $i < 3; $i++)
{
$pattern = "/<$keywords[$i]>(.*?)<\/keywords[$i]>/";
preg_match($pattern, $line, $matches);
echo "result is: " . $matches . "<br>";
}
}
}
else
{
$upload_text = "error";
}
$upload_text ="finished";
fclose($handle);
//unlink('XML/' . $file_name);
}
Вы должны использовать SimpleXML вместо этого читать XML. Вот пример:
<?php
$string = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<myanimelist>
<anime>
<series_animedb_id>1143</series_animedb_id>
<series_title><![CDATA[.hack//Intermezzo]]></series_title>
<series_type>Special</series_type>
<series_episodes>1</series_episodes>
</anime>
<anime>
<series_animedb_id>299</series_animedb_id>
<series_title><![CDATA[.hack//Liminality]]></series_title>
<series_type>OVA</series_type>
<series_episodes>4</series_episodes>
</anime>
</myanimelist>
XML;
$result = simplexml_load_string($string);
foreach ($result->anime as $anime)
{
echo trim($anime->series_title), "\n";
echo $anime->series_type, "\n";
echo $anime->series_episodes, "\n";
echo "==========================\n\n";
}
В вашем случае вы бы использовали simplexml_load_file
поэтому ваш код будет выглядеть так:
<?php
$result = simplexml_load_file('your_file_path_here.xml');
foreach ($result->anime as $anime)
{
echo trim($anime->series_title), "\n";
echo $anime->series_type, "\n";
echo $anime->series_episodes, "\n";
}
Ну, как вы можете прочитать в Официальная документация PHP, необязательный preg_match
Третий аргумент будет массив
Матчи
Если совпадения предоставлены, то он заполняется результатами поиска.
$ match [0] будет содержать текст, соответствующий полному шаблону,
$ матчи1 будет иметь текст, который совпадает с первым захваченным
заключенный в скобки подшаблон и так далее.
Так что просто поменяйте:
echo "result is: " . $matches . "<br>";
к:
echo "result is: " . $matches[1] . "<br>";
Надеюсь, поможет
Значение, возвращаемое в параметре $ match функции preg_match, представляет собой массив, первым элементом которого является полное совпадение, а следующими элементами являются группы захвата (части в скобках).
Итак, в вашем коде вас заинтересуют только $ match [1]:
echo "result is: $matches[1]<br>";