Выберите вложенный элемент xml, где вложенный тег является тем же именем, используя clojure.data.zip
У меня есть немного XML, который я использую clojure.data.zip.xml
, Этот XML имеет элементы с тем же именем, что и вложенные элементы:
<things>
<thing>
<thing>Want this</thing>
<thingattr>...but not this</thingattr>
</thing>
<thing>
<thing>Select this</thing>
<thingattr>...again, not this</thingattr>
</thing>
</things>
Тем не менее, доступ к внутреннему элементу кажется мне недоступным с xml->
функция в clojure.data.zip.xml. Однако, если вложенный элемент не имеет того же имени, что и родительский, все работает должным образом:
(ns xmlzip.core
(:require [clojure.xml :as xml]
[clojure.zip]
[clojure.data.zip.xml :as z])
(:gen-class))
(defn parse [s]
(clojure.xml/parse
(java.io.ByteArrayInputStream. (.getBytes s))))
(def example1 (clojure.zip/xml-zip (parse "
<things>
<thing>
<thing>Want this</thing>
<thingattr>...but not this</thingattr>
</thing>
<thing>
<thing>Select this</thing>
<thingattr>...again, not this</thingattr>
</thing>
</things>
")))
(def example2 (clojure.zip/xml-zip (parse "
<things>
<thing>
<subthing>Want this</subthing>
<thingattr>...but not this</thingattr>
</thing>
<thing>
<subthing>Select this</subthing>
<thingattr>...again, not this</thingattr>
</thing>
</things>
")))
(z/xml-> example2 :thing :subthing z/text)
;; ("Want this" "Select this") ;hooray!
(z/xml-> example1 :thing :thing z/text)
;; ("Want this...but not this" "Select this...again, not this") ;boo, hiss.
Я подозреваю, что это может быть нерешенный случай в clojure.data.zip.xml
, но я надеюсь, что кто-то может показать мне правильное использование, если я просто неправильно понимаю, как использовать библиотеку.