在XML文件中搜索 - PHP

时间:2018-01-05 10:25:18

标签: php xml

我的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存储在本地目录中。

1 个答案:

答案 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;
    }
}

Output 1 Output 2