Не зная Perl и его методов для чтения каталогов или обработки XML это немного псевдокода , который вы можете использовать в качестве шаблона:
strFileExtensionToMap="jpg"
strNodeName="image"
strCollectionName="images"
currentXMLNode=XML.CreateElement(strCollectionName)
StartFolder=Filesystem.GetFolder([however to get folder])
Call RecursiveMapContents(StartFolder)
RecursiveMapContents(folder){
For each file in folder.Files
{
if (file.extension=strFileExtensionToMap)
xmlFile=XML.CreateElement(strNodeName)
big_Url=XML.CreateElement("big_url)
big_url.text=file.path
xmlFile.AppendChild(big_url)
currentXMLNode.AppendChild(xmlFile)
}
For each subFolder in folder.Folders
{
call RecursiveMapContents(subFolder)
}
}
Конечно, вы можете сделать XML более универсальным, используя тип файла в качестве атрибута элемента файла:
<file type="image"/>
Вы также можете отобразить фактическую структуру вложенных каталогов, используя
<folder name="foldername" path="folderpath"> instead of <images>
Тогда вы могли бы включить текущий folderNode в свой вызов RecursiveMapContents, чтобы в него были вложены файлы и подпапки, что дает вам:
<folder name="foldername" path="folderpath">
<file type="image">
<big_url>file path</big_url>
</file>
<file type="image">
<big_url>file path</big_url>
</file>
<folder name="foldername" path="folderpath">
<file type="image">
<big_url>file path</big_url>
</file>
<file type="image">
<big_url>file path</big_url>
</file>
</folder>
</folder>
Я не включил пространства имен, хотя я признаюсь, что был несколько озадачен тем, почему вам нужны отдельные пространства имен для изображений и PDF-файлов. Смысл пространства имен состоит в том, чтобы обеспечить уникальное именование для набора элементов (чтобы чужой элемент изображения не путался с вашим элементом изображения, если вы хотите работать с их XML). Если вам действительно нужно пространство имен вообще, тогда "http://mydomain.com" должно быть достаточно для всех имен ваших элементов. Пространство имен говорит" этот элемент, для которого мы используем сокращенное изображение, на самом деле называется thisnamespace: image ". Так что, если у вас нет двух типов элемент изображения (один в формате PDF, другой в изображениях), и они не эквивалентны, достаточно одного пространства имен.
Также вы можете сделать гораздо больше, чтобы сделать ваш XML более общим и, возможно, менее многословным. В значительной степени каждый, кто разрабатывает формат XML, определяет, должно ли что-то вроде пути к файлу быть атрибутом элемента файла или дочернего элемента (например, вашего big_url), это зависит от того, нужно ли указывать данные (например, filepath = "this filepath "type =" filesystem | http "должен использовать дочерний элемент).
Извините, это не Perl-ответ, но я надеюсь, что это поможет.