Как я комбинирую результаты запросов фильтра zip на дереве XML в Clojure?

Я хочу объединить результаты трех запросов фильтра 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) новичок! Кто-либо может указать, как я могу записать запрос, который свяжет три других встроенных запроса?

8
задан Timothy Pratley 14 January 2010 в 05:05
поделиться

2 ответа

Вы можете получить все поддельники человека на одном шаге (XML-> XMLZIP: публикация: вкладчики: Person_Name) Затем получите имени деталей, если они существуют (XML1-> Personzip: фамилия текста) и комбинируйте их в результате, который вы хотите Вроде так:

(use 'clojure.contrib.zip-filter.xml)
(defn format-name
  [surname given suffix]
  (str surname (if given (str ", " given)) (if suffix (str ", " suffix))))
(defn get-names
  [xz] 
  (map (juxt 
         #(xml1-> % :surname text) 
         #(xml1-> % :given_name text) 
         #(xml1-> % :suffix text))
     (xml-> xz :publication :contributors :person_name)))
(let [x (clojure.zip/xml-zip (clojure.xml/parse "foo.xml"))] 
  (map (partial apply format-name) (get-names x)))

приводит к («Фамилия« Фамилия b, данная b, суффикс b »)

6
ответ дан 5 December 2019 в 20:16
поделиться

Я предпочитаю устанавливать свои CSS в файл CSS, а затем «AddClass», но даже так, ваш код (часть)

   $('select').blur(function(){ 
        $(this).css({ 
            'position' : 'relative', 
            'width' : original_width 
        }); 
    }); 

    $('select').blur(function(){ 
        $(this).css({ 
            'position' : 'relative', 
            'width' : original_width 
        }); 
    }); 

, кажется, является дубликатом

, я бы сделал это:

$('select').blur().css({ 
        'position' : 'relative', 
        'width' : original_width 
}); 

не уверены, что вы действительно Даже нужен .blur () Вот что с событием .Change () (попробуйте выбрать его, см., Если это решает вашу проблему ... Я использую выбирать часто на IE, и, кажется, не имею проблемы.

-121--1428695-

Я полагаю, что альтернативное решение состоит в

(xml-> xml :publication :contributors :person_name)

, а затем обрабатывать каждый позже.

2
ответ дан 5 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: