从XML检索文本


Retrieve text from 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);
}

您应该使用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第三个参数将是数组

匹配

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

所以只需更改您的:

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

至:

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

希望它能帮助

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

因此,在您的代码中,您只对$matches[1]:感兴趣

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