Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从XML检索文本?_Php_Arrays_Tags_Preg Match - Fatal编程技术网

Php 从XML检索文本?

Php 从XML检索文本?,php,arrays,tags,preg-match,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)

我想从数组中获取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);
}
if(isset($\u POST['send']))
{
echo“同步已启动
”; $handle=fopen(“XML/$file_name”,“r”); 如果($handle) { while(($line=fgets($handle))!==false) { $keywords=数组(“系列剧标题”、“系列剧类型”、“系列剧集”); 对于($i=0;$i<3;$i++) { $pattern=“/(**?/”; 预匹配($pattern,$line,$matches); echo“结果是:“.$匹配。”
”; } } } 其他的 { $upload_text=“错误”; } $upload_text=“已完成”; fclose($handle); //取消链接('XML/'.$file_name); }
正如您在中所看到的,可选的
preg\u match
第三个参数将是一个数组

火柴

如果提供了匹配项,则它将填充搜索结果。 $matches[0]将包含与完整模式匹配的文本, $matches将具有与第一次捕获的文本匹配的文本 括号中的子模式,依此类推

因此,只需更改您的:

echo "result is: " . $matches . "<br>";
echo“结果为:”$比赛。“
”;
致:

echo“结果为:”$匹配[1]。“
”;

希望有帮助

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

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

echo "result is: $matches[1]<br>";
echo”结果是:$matches[1]
”;
您应该使用来读取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";
}

您可以发布一个您正在尝试解析的原始数据的示例吗?您没有使用XML解析器的原因吗?您正在尝试回显
$matches
,这是一个数组。您需要循环并打印数组中找到的每个匹配项$matches是一个数组,因此您可以执行:
echo“result is:”。内爆(“,”,$matches)。“
但实际上,请仔细研究使用SimpleXML是的,SimpleXML是一条路要走!谢谢,我将尝试以下操作:)我不知道有一个解析器或工具集可以读取xml。当我这样做时,我得到:注意:C:\xampp\htdocs\import.php第83行中未定义的偏移量:1结果是:@ThaLioN mmm,正则表达式模式
$
中缺少一个
$pattern=“/(.*)/”谢谢,我明天会试试,看看能不能让它工作:)
<?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";
}
<?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";
}