Получить текст из XML?

Я хочу получить все слова между тегами 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);
}

0

Решение

Вы должны использовать 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";
}
0

Другие решения

Ну, как вы можете прочитать в Официальная документация PHP, необязательный preg_match Третий аргумент будет массив

Матчи

Если совпадения предоставлены, то он заполняется результатами поиска.
$ match [0] будет содержать текст, соответствующий полному шаблону,
$ матчи1 будет иметь текст, который совпадает с первым захваченным
заключенный в скобки подшаблон и так далее.

Так что просто поменяйте:

echo "result is: " . $matches . "<br>";

к:

echo "result is: " . $matches[1] . "<br>";

Надеюсь, поможет

0

Значение, возвращаемое в параметре $ match функции preg_match, представляет собой массив, первым элементом которого является полное совпадение, а следующими элементами являются группы захвата (части в скобках).

Итак, в вашем коде вас заинтересуют только $ match [1]:

echo "result is: $matches[1]<br>";
0
По вопросам рекламы [email protected]