0
首先我將序言說我只是在飛行中學習這一切,所以我可能不會使用正確的術語。使用PHP以遞歸方式查找xml子標籤,同時跟蹤父母
這裏是XML的一個非常簡化的版本,我需要解析:
<MyXML>
<Project>
<ProjectName>MyProject</ProjectName>
<ProjectType>Construction</ProjectType>
</Project>
<Folder>
<folderid>0</folderid>
<name>Root</name>
<Depth></Depth>
<Folder>
<folderid>43943</folderid>
<name>Construction Drawings</name>
<ParentEntityID>0</ParentEntityID>
<Folder>
<folderid>43944</folderid>
<name>Architectural</name>
<ParentEntityID>43943</ParentEntityID>
<Folder>
<folderid>43952</folderid>
<name>AutoCAD</name>
<ParentEntityID>43944</ParentEntityID>
<File>
<folderid>43952</folderid>
<filename>error.doc</filename>
</File>
<File>
<folderid>43952</folderid>
<filename>sb124a-map.jpg</filename>
</File>
</Folder>
</Folder>
</Folder>
<Folder>
<folderid>43975</folderid>
<name>Bid Management</name>
<ParentEntityID>0</ParentEntityID>
<File>
<folderid>43975</folderid>
<filename>ION Invoice 182 2013-04-09A.pdf</filename>
</File>
<Folder>
<folderid>99999</folderid>
<name>Temp</name>
<ParentEntityID>43975</ParentEntityID>
<File>
<folderid>99999</folderid>
<filename>ION Invoice 182 2013-04-09B.pdf</filename>
</File>
</Folder>
</Folder>
</Folder>
</MyXML>
正如你可以看到有文件夾的變化水平,與分散在各級文件。每個文件夾中還有一個對其父級文件夾(ParentEntityID)的引用,並且每個文件還具有對其父文件夾(folderid)的引用。不知道這是否有幫助。
我會從所有這一切需要的是每一個文件,並從該XML的列表其路徑,在CSV的項目名稱和項目類型,例如:
MyProject,Construction,Root/Construction Drawings/Architectural/AutoCad, error.doc
MyProject,Construction,Root/Construction Drawings/Architectural/AutoCad, sb124a-map.jpg
MyProject,Construction,Root/Bid Management,ION Invoice 182 2013-04-09A.pdf
MyProject,Construction,Root/Bid Management/Temp,ION Invoice 182 2013-04-09B.pdf
我可以計算出如何捕捉該結構的ProjectName和ProjectType始終是已知的並且是靜態的。我覺得我需要對文件夾/文件部分的可變性進行某種遞歸,但是我真的很掙扎。
在長達數千行的真正XML中,甚至File元素都有我需要捕獲數據的子元素,但是我想如果我能理解如何使用這個簡化的XML,那麼我應該能夠剩下的。我希望。謝謝。
請耐心等待。所以foreach($ myxml-> Folder as $文件夾)將解析頂層的每個文件夾?在$文件夾中包含XML中的當前「位置」?然後,深度函數查找當前級別的文件,然後查找當前級別的文件夾。當它找到一個它再次運行該功能時,查找文件,尋找更多的文件夾,向下鑽取。聽起來還不錯,如果在任何特定文件夾級別有更多元素需要檢查,我可以添加更多「$ current_folder-> elementname」來訪問「本地」元素。我在正確的軌道上嗎? – ChrisYYC
你是。 $ folder和$ file變量是SimpleXMLElement對象。 [SimpleXML](http://us.php.net/manual/en/simplexml.examples-basic.php)可以非常方便地訪問XML文檔的每個元素。 – Erlock