Php 从XML检索文本?
我想从数组中获取XML标记之间的所有单词,当前结果是: 注意:数组到字符串的转换在。。。。。。。。在线84 结果是:数组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)
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";
}