我正在尝试遍历xml文件并检查所有电子邮件字段,以查看它们是否与预定义的电子邮件匹配,以及是否确实抓取了contactid
我遇到的问题是xml文件的结构似乎并没有以使循环遍历变得容易的方式组合在一起。
例如,我正在使用此代码段来解析xml文件
$p = xml_parser_create();
xml_parse_into_struct($p,$response,$vals,$index);
xml_parser_free($p);
echo "\nVals array\n";
print_r($vals);
?>
使用此方法,我可以通过执行contactid
来获得第一行的$vals[4]
,但是文件的结构不允许我循环检查我能想到的其他字段。
我尝试了其他解析xml文件的方法,但是它们看上去都与下面的链接中的方法相同
这是$response
返回http://deathcrow.altervista.org/response.xml的xml文件
我如何遍历xml文件中的所有电子邮件并交叉引用,然后获取匹配的电子邮件中的contactid
?
答案 0 :(得分:1)
使用SimpleXML和XPath可以使此操作“更轻松”。 XPath是主要部分,可让您在以后找到数据...
$xml = simplexml_load_file("http://deathcrow.altervista.org/response.xml");
// Test email to find
$email = 'lyounger42@gamil.com';
$contactID = $xml->xpath("//row[FL[@val='Email'][text()='$email']]/FL[@val='CONTACTID']");
echo (string)$contactID[0];
输出
2594788000014076002
要分解XPath ...
//row[FL[@val='Email'][text()='$email']]/FL[@val='CONTACTID']
这将为电子邮件查找具有属性val(@val
)的行元素,然后检查值(text()
)是您之后的电子邮件地址。
决赛
/FL[@val='CONTACTID']
从FL元素中提取contactID。
由于XPath将返回匹配项列表,因此最后一行使用$contactID[0]
仅返回第一个匹配项。使用(string)
可确保它是一个字符串,而不是SimpleXMLElement。