2017-10-10 112 views
0

我有我需要解析看起來類似於下面的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是否有能力實現這個功能? 感謝

回答

1

你可以做到這一點很簡單地用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