Php 从xml文件中获取特定字段

Php 从xml文件中获取特定字段,php,xml,Php,Xml,我试图循环浏览一个xml文件并检查所有电子邮件字段,看看它们是否匹配预定义的电子邮件,以及它是否抓取了contactid 我遇到的问题是,xml文件的结构似乎没有以一种使循环变得容易的方式组合在一起 例如,我使用这个片段来解析xml文件 $p=xml\u parser\u create(); xml将解析为结构($p、$response、$vals、$index); 无xml解析器($p); 回显“\nVals数组\n”; 打印(VAL); ?> 使用此选项,我可以通过执行$vals[4]获得

我试图循环浏览一个xml文件并检查所有电子邮件字段,看看它们是否匹配预定义的电子邮件,以及它是否抓取了
contactid

我遇到的问题是,xml文件的结构似乎没有以一种使循环变得容易的方式组合在一起

例如,我使用这个片段来解析xml文件

$p=xml\u parser\u create();
xml将解析为结构($p、$response、$vals、$index);
无xml解析器($p);
回显“\nVals数组\n”;
打印(VAL);
?>
使用此选项,我可以通过执行
$vals[4]
获得第一行的
联系人ID
,但文件的结构不允许我循环检查我能想到的其他字段

我尝试过其他解析xml文件的方法,但它们看起来都与下面链接中的方法相同

这是
$response
返回的xml文件


如何循环xml文件中的所有电子邮件并交叉引用它们,然后获取匹配电子邮件的联系人ID?

使用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']
为contactID选择FL元素


由于XPath将返回匹配项列表,最后一行使用
$contactID[0]
仅返回第一个匹配项。使用
(string)
可确保它将是一个字符串而不是SimpleXMLElement。

这适用于我的服务器上的文件,但在
$response
是来自api调用的xml响应的情况下不起作用,在这种情况下会导致错误“致命错误:调用布尔值上的成员函数xpath()”如果已经将响应作为字符串-将第一行更改为
$xml=simplexml\u load\u string($response)