clojure命名空间感知xml解析器/拉链
有人知道名称空间感知的xml解析器/拉链吗 我希望解析以下内容,而不是拉进一大堆axis或类似的LIB:clojure命名空间感知xml解析器/拉链,xml,soap,clojure,Xml,Soap,Clojure,有人知道名称空间感知的xml解析器/拉链吗 我希望解析以下内容,而不是拉进一大堆axis或类似的LIB: (ns foo (:require [clojure.zip :as zip] [clojure.xml :as xml]) (:use clojure.data.zip.xml)) (def xml "<soap:Envelope xmlns=\"urn:WEBSERVICE-URN\" xmlns:
(ns foo
(:require [clojure.zip :as zip]
[clojure.xml :as xml])
(:use clojure.data.zip.xml))
(def xml "<soap:Envelope xmlns=\"urn:WEBSERVICE-URN\"
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">
<soap:Body>
<loginResponse>
<result>
<sessionKey>SESSION-KEY-HERE</sessionKey>
</result>
</loginResponse>
</soap:Body>
</soap:Envelope>")
(def root
(zip/xml-zip
(xml/parse
(java.io.ByteArrayInputStream. (.getBytes xml "UTF-8")))))
(def key (xml1-> root ???? ???? :loginResponse :result :sessionKey text))
(ns-foo)
(:require[clojure.zip:as-zip]
[clojure.xml:as-xml])
(:使用clojure.data.zip.xml))
(def xml)
这里是会话键
")
(定义根)
(zip/xml-zip)
(xml/parse)
(java.io.ByteArrayInputStream.(.getBytes-xml“UTF-8”;)))
(def键(xml1->root:loginResponse:结果:sessionKey文本))
我似乎无法浏览具有xml名称空间的xml元素?我认为这里的问题可能是您使用了
xml1->
,而不是xml中的名称空间。XML zip命名空间中的标记=
谓词(在将关键字与xml1->
一起使用时暗示)默认为自动下降模式,这意味着它在尝试匹配元素标记之前下降到当前节点的子节点。由于根元素已经是一个soap:Envelope
,因此不需要在xml1->
列表中包含该过滤器。以下内容应为您提供所需内容:
(xml1-> root :soap:Body :loginResponse :result :sessionKey text)
请注意,元素qnames在clojure.xml
中以其未展开的形式用作标记名,使用名称包含冒号的关键字是完全正确的
或者,你可以说:
(require '[clojure.data.zip :as zf])
(xml1-> (zf/auto false root)
:soap:Envelope :soap:Body :loginResponse :result :sessionKey text)
如果您仍然需要支持名称空间的XML解析器,中有一个解析器,尽管它只是放弃名称空间声明,只使用本地名称:
(require '[clojure.data.xml :as data-xml])
(def root (-> (java.io.StringReader. xml) data-xml/parse zip/xml-zip)
(xml1-> root :Body :loginResponse :result :sessionKey text)