我有一个XML文件需要解析,如下所示:
<directory name="Addbriefs">
<file name="File1.pdf"/>
<file name="File2.pdf"/>
<file name="File3.pdf"/>
<file name="File4.pdf"/>
</directory>
<directory name="Addusefulinfo">
<file name="FileA.pdf"/>
<file name="FileB.pdf"/>
<file name="FileC.pdf"/>
<file name="FileD.pdf"/>
</directory>
<directory name="Newbriefs">
<file name="FileZ.pdf"/>
<file name="FileY.pdf"/>
<file name="FileX.pdf"/>
<file name="FileW.pdf"/>
</directory>
我正在使用 PHP,并希望能够返回一个字符串,其中包含所有文件元素的所有名称属性,但前提是父元素(目录)的 name 属性与我在其他地方定义的变量匹配。
即如果 $var = "Newbriefs",我想返回以下字符串...
FileZ.pdf FileY.pdf FileX.pdf FileW.pdf
我在同一网站的PHP代码的其他地方成功地使用了simplexml,但到目前为止,我只返回了特定元素类型的所有属性的字符串,而不是基于父元素属性是什么。我已经检查过了,但我不确定 simplexml 是否有能力实现这一目标?谢谢
相当简单地使用SimpleXML的xpath
方法做到这一点:
$var = "Newbriefs";
$files = $sxml->xpath("directory[@name='$var']/file/@name");
此查询将 <directory>
标记筛选为 name="Newbriefs" 的标记,然后返回所有子元素<file>
的 name 属性。
您可以像对待普通SimpleXMLElement
对象一样对待 $files
数组中的每个元素 - 只需将其转换为字符串即可获取内容:
$filename = (string) $files[0]; // FileZ.pdf
请参阅 https://eval.in/877375