У меня есть входной XML, который я преобразовал в clojure-map и могу видеть все значения в одной карте clojure, как эта
Но как я могу отфильтровать определенные значения (mnAmountReceived) из вложенных тегов detail_D1 структуры XML,
Мой XML выглядит примерно так, для краткости урезан:
<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>
Например: я хочу отфильтровать mnAmountReceived и назначить их отдельным ключам на основе того, что mnOrderLineNumber находится под тегом.
Я получаю XML, который я конвертирую в карту clojure, используя следующие функции
(xml/parse-str xml-str))
(defn clojurify-xml-map
[clj-xml]
(->> clj-xml
get-body
(map xml->map)
group-and-flattened-source-data))
Я пытаюсь отфильтровать mnOrderLineNumber, используя, например, значение 1.0, чтобы я мог получить егосоответствующее значение mnAmountReceived
(defn filter-price-line [coll]
(filter #(#{1.0} (-> % :mnOrderLineNumber read-string)) coll)
)
Я хочу отфильтровать mnAmountReceived и узнать, с каким mnOrderLineNumber он поставляется вместе, чтобы я мог отобразить его в своем ответе на соответствующие поля для последующих систем.