Пожалуйста, помогите составить XML структуру для обычного дерева каталогов.
Имеется список каталогов, каждый из каталогов обязан имееть имя, путь, id а также может содержать в себе другой каталог. Я не соображу как в XML структуре показать что один объект может содержать другой объект такого же типа. И что задавать для каталогов у которых нет подкаталогов? Мой Вариант каталога AA с непустым подкаталогом BB и каталога СС без подкаталогов:
Здравствуйте Ort, Вы писали:
Ort>Пожалуйста, помогите составить XML структуру для обычного дерева каталогов.
Ort>Имеется список каталогов, каждый из каталогов обязан имееть имя, путь, id а также может содержать в себе другой каталог. Я не соображу как в XML структуре показать что один объект может содержать другой объект такого же типа. И что задавать для каталогов у которых нет подкаталогов? Мой Вариант каталога AA с непустым подкаталогом BB и каталога СС без подкаталогов:
Ort><folders_list> Ort> <folder_object> Ort> <folder_name>AA</folder_name> Ort> <r_folder_path>/AA</r_folder_path> Ort> <folder_id>1</folder_id> Ort> <folder_object> Ort> <folder_name>BB</folder_name> Ort> <r_folder_path>/AA/BB</r_folder_path> Ort> <folder_id>2</folder_id> Ort> <folder_object> Ort> </folder_object> Ort> <folder_object> Ort> <folder_name>СС</folder_name> Ort> <r_folder_path>/AA/СС</r_folder_path> Ort> <folder_id>3</folder_id> Ort> <folder_object> Ort> <folder_object></folder_object> Ort></folders_list>
Зачем такие извраты? Все можно сделать гораздо проще.
<folders>
<folder name="AA" path="/AA" id="1">
<folder name="BB" path="/AA/BB" id="2"/>
<folder>
<folder name="CC" path="/CC" id="3"/>
</folders>
L>Зачем такие извраты? Все можно сделать гораздо проще. L><folders> L> <folder name="AA" path="/AA" id="1"> L> <folder name="BB" path="/AA/BB" id="2"/> L> <folder> L> <folder name="CC" path="/CC" id="3"/> L></folders>
Интересно. Т.е. рекомендуете все прописывать через аттрибуты. В 4 строчке только пропущен закрывающий символ "/" кажется.
Я уже подумывал о таком варианте, но как в этом случае будет выглядеть запрос через
XPath, который выбирает все подкаталоги заданного каталога по заданному пути path?
Чувствую, что он должен быть совсем простым.
Здравствуйте Ort, Вы писали:
L>>Зачем такие извраты? Все можно сделать гораздо проще. L>><folders> L>> <folder name="AA" path="/AA" id="1"> L>> <folder name="BB" path="/AA/BB" id="2"/> L>> <folder> L>> <folder name="CC" path="/CC" id="3"/> L>></folders>
Ort>Интересно. Т.е. рекомендуете все прописывать через аттрибуты.
Так проще. Не нужно потом отфильтровывать аттрибуты (они ведь по сути именно аттрибуты, а не потомки ноды).
>В 4 строчке только пропущен закрывающий символ "/" кажется.
Да, есть такая буква.
Ort>Я уже подумывал о таком варианте, но как в этом случае будет выглядеть запрос через Ort>XPath, который выбирает все подкаталоги заданного каталога по заданному пути path?
Что-то типа select="folder[@path='нужный мне путь']", а потом перебор потомков найденного узла.
Да нет, все нормально, так и было задумано я уже все сделал.
Просто я не был тогда уверен, что XPath отработает.
Я все таки решил оставить свой вариант, но слегка его скорректировав:
<folders>
<folder_object>
<folder_name>AA</folder_name>
<r_folder_path>/AA</r_folder_path>
<folder_id>1</folder_id>
<folder_object>
<folder_name>BB</folder_name>
<r_folder_path>/AA/BB</r_folder_path>
<folder_id>2</folder_id>
</folder_object>
</folder_object>
...
</folders>
Преимущество такого подхода, в отличии от подхода все определить в аттрибутах, заключается в том, что я могу одним выражением XPath
сразу вытащить все мне необходимое, а именно, интересующий меня фолдер плюс все его субфолдеры. В качестве водного параметра должен служить r_folder_path (как уникальный для каждого фолдера) или folder_id. Тогда Xpath выглядит так:
XPath = "//folder_object[folder_path = '...']";
"По мне, уж лучше пей, да дело разумей"
Re[3]: Дерево каталогов
От:
Аноним
Дата:
23.01.02 15:23
Оценка:
Здравствуйте Ort, Вы писали:
Ort>Преимущество такого подхода, в отличии от подхода все определить в аттрибутах, заключается в том, что я могу одним выражением XPath Ort>сразу вытащить все мне необходимое, а именно, интересующий меня фолдер плюс все его субфолдеры. В качестве водного параметра должен служить r_folder_path (как уникальный для каждого фолдера) или folder_id. Тогда Xpath выглядит так: Ort>XPath = "//folder_object[folder_path = '...']";
или XPath = "//folder_object[@folder_path = '...']";
для сучая с атрибутом
А>или XPath = "//folder_object[@folder_path = '...']"; А>для сучая с атрибутом
Это не совсем так. Субфолдеры имеют другой folder_path, отличный по значению
от фолдера родителя. Именно поэтому субфолдеры при линейной иерархии не будут
выбраны. Именно поэтому я и решил организовать гранение субфолдеров как:
<folder_object>
<folder_name>
</folder_name>
<folder_path>
</folder_path>
<folder_object>
Этот субфолдер будет вытащен XPath автоматически при совпадении folder_path родителя заданному значению, даже если его folder_path другой
</folder_object>
</folder_object>