Я хочу объединить результаты трех запросов zip-фильтра в дереве xml. XML, который я анализирую, выглядит так:
<someroot>
<publication>
<contributors>
<person_name>
<surname>Surname A</surname>
</person_name>
<person_name>
<given_name>Given B</given_name>
<surname>Surname B</surname>
<suffix>Suffix B</suffix>
</person_name>
</contributors>
</publication>
</someroot>
Из этого примера видно, что <given_name>
и <suffix>
являются необязательными - требуется только <surname>
. Здесь кроется моя проблема - если я выполню три отдельных запроса, то ответы, которые я получу, будут разногласия друг с другом:
(xml-> xml :publication :contributors :person_name :given_name text)
(xml-> xml :publication :contributors :person_name :surname text)
(xml-> xml :publication :contributors :person_name :suffix text)
После выполнения этих трех запросов у меня останутся три последовательности, мощности которых не совпадают; given_name
и suffix
будут иметь длину 1, а surname
будет иметь длину 2. Для меня невозможно объединить компоненты каждого имени. Мне нужно написать один запрос, который будет выполнять это объединение имен во время построения последовательности.
Я смотрю на очень скудную документацию для clojure.contrib.zip-filter.xml
и не могу понять, как я мог это сделать (или, если это вообще возможно). К сожалению, я новичок Clojure (и Lisp)! Кто-нибудь может указать, как я могу написать запрос, который объединит три других встроенных запроса?