我的XML看起来像这样
<root lastUpdated="20180101120330" ttl="24">
<Parent1>...</Parent1>
<Parent2>
<sub parm1="google.com" parm2="email@email.com" parm3="5343243434" parm4="google" parm5="876787" parm6="" parm7="ACTIVE">...</sub>
<sub parm1="yahoo.com" parm2="email2@email.com" parm3="4434343" parm4="yahoo" parm5="232322" parm6="" parm7="ACTIVE">...</sub>
<sub parm1="facebook.com" parm2="email3@email.com" parm3="222334" parm4="facebook" parm5="12233" parm6="" parm7="ACTIVE">...</sub>
</Parent2>
</root>
我想查找parm3,如果匹配则应该返回parm1。 XML存储在本地目录中。
答案 0 :(得分:2)
您可以使用SimpleXMLElement并对/root/Parent2/sub
中的<sub>
项使用<Parent2>
之类的xpath查询。
或者例如/root/*[starts-with(name(),'Parent')]/sub
<sub>
元素中的<Parent...>
元素。
然后,您可以使用attributes进行比较。
$data = <<<DATA
<root lastUpdated="20180101120330" ttl="24">
<Parent1></Parent1>
<Parent2>
<sub parm1="google.com" parm2="email@email.com" parm3="5343243434" parm4="google" parm5="876787" parm6="" parm7="ACTIVE">...</sub>
<sub parm1="yahoo.com" parm2="email2@email.com" parm3="4434343" parm4="yahoo" parm5="232322" parm6="" parm7="ACTIVE">...</sub>
<sub parm1="facebook.com" parm2="email3@email.com" parm3="222334" parm4="facebook" parm5="12233" parm6="" parm7="ACTIVE">...</sub>
</Parent2>
</root>
DATA;
$elm= new SimpleXMLElement($data);
$a = $elm->xpath('/root/Parent2/sub');
for ($i = 0; $i < count($a); $i++) {
if ((string)$a[$i]->attributes()->parm3 === "4434343") {
echo $a[$i]->attributes()->parm1;
}
}