Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure命名空间感知xml解析器/拉链_Xml_Soap_Clojure - Fatal编程技术网

clojure命名空间感知xml解析器/拉链

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:

有人知道名称空间感知的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: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)