क्लोजर में किसी XML स्ट्रिंग से किसी तत्व का मान प्राप्त करने का सबसे आसान तरीका क्या है? मैं कुछ ऐसा रहा हूँ:क्लोजर में एक्सएमएल में किसी तत्व का मूल्य प्राप्त करना?
(get-value "<a><b>SOMETHING</b></a>)" "b")
वापस जाने के लिए
"SOMETHING"
क्लोजर में किसी XML स्ट्रिंग से किसी तत्व का मान प्राप्त करने का सबसे आसान तरीका क्या है? मैं कुछ ऐसा रहा हूँ:क्लोजर में एक्सएमएल में किसी तत्व का मूल्य प्राप्त करना?
(get-value "<a><b>SOMETHING</b></a>)" "b")
वापस जाने के लिए
"SOMETHING"
इस प्रयास करें:
user=> (use 'clojure.xml)
user=> (for [x (xml-seq
(parse (java.io.File. file)))
:when (= :b (:tag x))]
(first (:content x)))
चेक अधिक जानकारी के लिए इस link।
क्या यह है: Clojure XML Parsing आप क्या चाहते हैं? एक वैकल्पिक (बाहरी) स्रोत यहां है: http://blog.rguha.net/?p=510।
मैं नहीं जानता कि यह कैसे मुहावरेदार Clojure है, लेकिन क्या आप जानते हैं के लिए हो और जैसे XPath यह काफी आसानी से Clojure में होने के लिए इस्तेमाल किया जा सकता है अगर अपने उत्कृष्ट interoperability with Java:
(import javax.xml.parsers.DocumentBuilderFactory)
(import javax.xml.xpath.XPathFactory)
(defn document [filename]
(-> (DocumentBuilderFactory/newInstance)
.newDocumentBuilder
(.parse filename)))
(defn get-value [document xpath]
(-> (XPathFactory/newInstance)
.newXPath
(.compile xpath)
(.evaluate document)))
user=> (get-value (document "something.xml") "//a/b/text()")
"SOMETHING"
क्रिस्टोफ़ ग्रैंड के महान लू ए पुस्तकालय का उपयोग करना:
(require '[net.cgrand.enlive-html :as html])
(map html/text
(html/select (html/html-snippet "<a><b>SOMETHING</b></a>") [:a :b]))
CLJ-xpath का उपयोग करना, (https://github.com/brehaut/necessary-evil):
(use 'com.github.kyleburton.clj-xpath :only [$x:text])
($x:text "https://stackoverflow.com/a/b" "<a><b>SOMETHING</b></a>)")
ज़िप्पर एक्सएमएल के लिए आसान हो सकते हैं, वे आपको xpath सिंटैक्स की तरह देते हैं जिसे आप मूल क्लोजर फ़ंक्शंस के साथ मिश्रित कर सकते हैं।
user=> (require '[clojure zip xml] '[clojure.contrib.zip-filter [xml :as x]])
user=> (def z (-> (.getBytes "<a><b>SOMETHING</b></a>")
java.io.ByteArrayInputStream.
clojure.xml/parse clojure.zip/xml-zip))
user=> (x/xml1-> z :b x/text)
रिटर्न
"SOMETHING"
.. क्योंकि यह न केवल अधिक कार्यात्मक लेकिन यह भी अधिक आसान एक बार आप इसे की फांसी पाने के विस्तार करने के लिए है
मैं इस रूप में सबसे अच्छा तरीका सुझाव है तो जिपर के +1 – Ash