小编Tab*_*ber的帖子

如何在Clojure中仅从嵌套XML中过滤一些值?

我输入了已转换为clojure-map的XML,并且可以像这样在一个clojure映射中看到所有值

但是如何从嵌套的detail_D1标签XML结构中过滤某些值(mnAmountReceived)。

我的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>
Run Code Online (Sandbox Code Playgroud)

例如:我想过滤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))
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用值1.0过滤掉mnOrderLineNumber,例如,这样我就可以得到它对应的mnAmountReceived值

(defn filter-price-line [coll]
(filter #(#{1.0} (-> % :mnOrderLineNumber read-string)) coll)
)
Run Code Online (Sandbox Code Playgroud)

我想过滤掉mnAmountReceived并知道它附带了哪个mnOrderLineNumber,以便可以在响应中将其映射到下游系统的适当字段。

xml clojure

3
推荐指数
1
解决办法
155
查看次数

标签 统计

clojure ×1

xml ×1