/ / Xml.data के विश्लेषण किए गए इनपुट - xml, clojure से कुंजी के मानों को कैसे पार्स करें

Xml.data के पार्स किए गए इनपुट - xml, clojure से कुंजी के मानों को कैसे पार्स करें

मुझे यह पता लगाने में परेशानी हो रही है कि क्यासामग्री का उपयोग कर मान निकालने के बाद तत्व पार्स किए गए एक्सएमएल इनपुट में हैं: सामग्री कुंजी। निम्नलिखित पार्स किए गए एक्सएमएल इनपुट को देखते हुए, मैं सभी सामग्री के लिए मान कैसे निकाल सकता हूं?

#clojure.data.xml.Element{
:tag :Header,
:attrs {},
:content (
#clojure.data.xml.Element{
:tag :ExportType,
:attrs {},
:content ("Tamper Export")}
#clojure.data.xml.Element{
:tag :CurrentDateTime,
:attrs {},
:content ("2012-06-26T15:40:22.063")}
#clojure.data.xml.Element{
:tag :ScheduledDateTime,
:attrs {},
:content ("2012-06-25T00:00:00")}
#clojure.data.xml.Element{
:tag :ExportGuid,
:attrs {},
:content ("{06643D9B-DCD3-459B-86A6-D21B20A03576}")}
#clojure.data.xml.Element{
:tag :FractionalReadIndicator,
:attrs {},
:content ("1")})}

यह आउटपुट डेटा.एक्सएमएल का उपयोग करके एक एक्सएमएल फाइल को पार्स करके बनाया गया था, और फिर इसका उपयोग करके निकाला गया

(first (:content parsed-xml-input))

धन्यवाद।

निम्नलिखित मुझे केवल डिवाइस प्रकार और डिवाइस आईडी दे रहा है, जो कि xml फ़ाइल में सामग्री का केवल एक हिस्सा है। <DeviceId>80580608</DeviceId><DeviceType>43</DeviceType>

(defn extract-inner-map-val
"Returns a map of embedded :content tag and value."

[item]

(let [key-elem (-> item :content first)
val-elem (-> item :content second)]

[(-> key-elem :content first)
(-> val-elem :content first)]))

(defn extract-content-from-map
"Accepts a sequence of values associated with a map key,
and transforms them into a map of key/value pairs."

[parsed-map]

(into {} (map extract-inner-map-val (:content parsed-map))))

उत्तर:

जवाब के लिए 3 № 1

यह मूल रूप से पेड़ चलने के लिए नीचे आता है औरसभी का चयन: सामग्री। आप यह कर सकते हैं और clojure.zip (कार्यात्मक ज़िप्पर) के साथ बहुत कुछ कर सकते हैं, हालांकि इस मामले में यह थोड़ा भारी हाथ है जब आपको वास्तव में एक पेड़ चलना है।

user> (pprint
(flatten
(map :content (first (tree-seq :content :content (:content data))))))

("Tamper Export"
"2012-06-26T15:40:22.063"
"2012-06-25T00:00:00"
"{06643D9B-DCD3-459B-86A6-D21B20A03576}"
"1")

आप चाहते हैं कि यह फ़्लैटन को चाहेगा, जो इसे और अधिक अच्छी तरह प्रिंट करता है।