从xml文件获取特定字段

时间:2019-02-12 18:57:15

标签: php xml

我正在尝试遍历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

1 个答案:

答案 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。