У меня есть код, который анализирует данные мыла с помощью молнии. Когда я отформатирую его так, как будто он работает так, как ожидается, для меняИспользование xml-> in a let
(defn parse-data
[raw-data]
(let [soap-data (:body raw-data)
soap-envelope (zip/xml-zip
(xml/parse
(java.io.ByteArrayInputStream. (.getBytes (str soap-data) "UTF-8"))))]
(pprint (xml-z/xml-> soap-envelope :soap:Envelope :soap:Body :Tag1 :Tag2))))
Он печатает ожидаемый результат. Но когда я двигаю XML парсинг в Выпускаемом заявлении он не компилируется, со следующей ошибкой (я проверил мою тройную скобка совпадает)
RuntimeException EOF while reading, starting at line 3 clojure.lang.Util.runtimeException (Util.java:221)
jcode.oc-drift.aquisition=> (pprint result-data)))
CompilerException java.lang.RuntimeException: Unable to resolve symbol: result-data in this context, compiling:(/tmp/form-init6714472131112461091.clj:1:1)
RuntimeException Unmatched delimiter:) clojure.lang.Util.runtimeException (Util.java:221)
RuntimeException Unmatched delimiter:) clojure.lang.Util.runtimeException (Util.java:221)
jcode.oc-drift.aquisition=>
код был изменен, чтобы поставить XML-г/XML -> позвонить в Выпускаемое заявление следующим образом
(defn parse-data
[raw-data]
(let [soap-data (:body raw-data)
soap-envelope (zip/xml-zip
(xml/parse
(java.io.ByteArrayInputStream. (.getBytes (str soap-data) "UTF-8"))))
result-data (xml-z/xml-> soap-envelope :soap:Envelope :soap:Body :GetNextTripsForStopResponse :GetNextTripsForStopResult)]
(pprint result-data)))
Является ли это ошибка с формой пусть, или я что-то отсутствует о поведении XML-> функциональности?
Полный код файла с вызовом функции нерабочей:
ЦСИ/привет/core.clj:
(ns hello.core
(:require [clj-http.client :as http-client]
[clojure.zip :as zip]
[clojure.xml :as xml]
[clojure.data.xml :as xml-data]
[clojure.data.zip.xml :as xml-z]))
(use 'clojure.pprint)
(def app-id "redacted")
(def api-key "redacted")
(def post-data {:apiKey api-key :appID app-id})
(defn get-data
[post-data function]
"function is a string with the api function to be called"
(let [url (str "redacted" function)]
(http-client/post url {:form-params post-data})))
(defn parse-data
[raw-data]
(let [soap-data (:body raw-data)
soap-envelope (zip/xml-zip
(xml/parse
(java.io.ByteArrayInputStream. (.getBytes (str soap-data) "UTF-8"))))
result-data (xml-z/xml-> soap-envelope :soap:Envelope :soap:Body :GetNextTripsForStopResponse :GetNextTripsForStopResult)]
(pprint result-data)))
project.clj:
(defproject hello "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:main hello.core
:dependencies [[org.clojure/clojure "1.7.0"]
[org.clojure/data.xml "0.0.8"]
[org.clojure/data.zip "0.1.2"]
[clj-http "2.2.0"]])
Где находится 'xml-z/xml->' from? –
* nod * - Я как раз собирался запросить заголовок 'ns' и любые другие изменения, необходимые, чтобы сделать это [MCVE] (http://stackoverflow.com/help/mcve)/[SSCCE] (http://sscce.org/). –
Чтобы быть понятным - для идеального MCVE код должен быть достаточно полным, чтобы кто-то другой мог запустить REPL, вставить прямо из вашей проблемы и увидеть одно и то же исключение без каких-либо других усилий/подготовки. Библиотечные зависимости могут сделать этот идеал немного трудным для достижения, но [lein-try] (https://github.com/rkneufeld/lein-try) и тому подобное приближают его к разуму. –