从XML检索文本?

时间:2014-10-07 21:15:36

标签: php arrays tags preg-match

我想从数组中获取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);
}

3 个答案:

答案 0 :(得分:0)

好吧,正如您可以在Official PHP Documentation中读到的那样,可选的preg_match第三个参数将是一个数组

  

匹配

     

如果提供了匹配,那么它将填充搜索结果。   $ matches [0]将包含与完整模式匹配的文本,   $ matches 1将包含与第一个捕获的匹配的文本   带括号的子模式,依此类推。

所以只需改变你的:

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

到:

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

希望有所帮助

答案 1 :(得分:0)

preg_match函数的$ matches参数中返回的值是一个数组,其第一个元素是整个匹配,以下元素是捕获组(括号之间的部分)。

所以,在你的代码中,你只对$ matches [1]感兴趣:

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

答案 2 :(得分: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";
}

Live DEMO.

在您的情况下,您将使用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";
}