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