I have input XML which I have converted to clojure-map and can see all the values in one clojure map like this
But how can I filter certain values(mnAmountReceived) out of nested detail_D1 tags XML structure.
My XML is something like this, truncated for brevity:
<svResponse category="EVENT" environment="ENV910" pwd="asdfas"
responseCreator="XAPI" role="ALL" session="7370710" token="asdfasf"
type="realTimeEvent" user="sv"
xmlns:rte="http://www.schemas.e1.oracle.com">
<event>
<header>
<eventVersion>1.0</eventVersion>
<type>EVENTOUT</type>
<user>sv</user>
<role>*ALL</role>
</header>
<body elementCount="3">
<detail_D1>
<szNextStatus>999</szNextStatus>
<mnOrderLineNumber>1.000</mnOrderLineNumber>
<mnAmountReceived>100</mnAmountReceived>
</detail_D1>
<detail_D1>
<szNextStatus>999</szNextStatus>
<mnOrderLineNumber>2.000</mnOrderLineNumber>
<mnAmountReceived>200</mnAmountReceived>
</detail_D1>
<detail_D1>
<szNextStatus>999</szNextStatus>
<mnOrderLineNumber>3.000</mnOrderLineNumber>
<mnAmountReceived>300</mnAmountReceived>
</detail_D1>
</body>
</event>
</svResponse>
For eg: I want to filter mnAmountReceived and assign them to separate keys based on what the mnOrderLineNumber is under the tag.
I am getting an xml which I convert to clojure map using the below functions
(xml/parse-str xml-str))
(defn clojurify-xml-map
[clj-xml]
(->> clj-xml
get-body
(map xml->map)
group-and-flattened-source-data))
I am trying to filter out the mnOrderLineNumber using the value 1.0 for eg so that I can get it's corresponding mnAmountReceived value
(defn filter-price-line [coll]
(filter #(#{1.0} (-> % :mnOrderLineNumber read-string)) coll)
)
I want to filter out mnAmountReceived and know with which mnOrderLineNumber it comes along with so that I can map it out in my response to proper fields for downstream systems.