PHP的SimpleXML - 获取所有子属性如果父属性等于变量值

问题描述:

我有我需要解析看起来类似于下面的XML文件:PHP的SimpleXML - 获取所有子属性如果父属性等于变量值

<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 

我成功地使用SimpleXML的其他地方在我的PHP代码在同一网站上,但到目前为止只返回一个特定元素类型的所有属性的字符串,而不是基于父元素的属性。 我检查过,我不确定simplexml是否有能力实现这个功能? 感谢

你可以做到这一点很简单地用SimpleXML的xpath方法:

$var = "Newbriefs"; 
$files = $sxml->xpath("directory[@name='$var']/file/@name"); 

这个查询过滤<directory>标记那些NAME = “Newbriefs”,然后返回从属性所有的孩子<file>元素。

您可以在$files数组中对待每一个元素,你会正常SimpleXMLElement对象 - 只是将它转换为字符串,以获得内容:

$filename = (string) $files[0]; // FileZ.pdf 

https://eval.in/877375

+0

精湛,感谢iainn,我我们会试试 – ladders81

+0

辉煌的,只是测试了这个,并设法让它马上工作。非常感谢您的及时帮助,非常感谢! – ladders81