Php 从xml文件中获取特定字段
我试图循环浏览一个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]获得
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)
。