我有一个类似于下面的
的xml<countryResults>
<countryResult>
<PricingMode>CPM</PricingMode>
<countryRegions>
<Regions>
<Region>
<RegionID>Ds01</RegionID>
<SensitivityAsset ID=\"19940\" ClassID=\"CreditCurve\"/>
<RegionEntry>
<Dimension>
<type>Currency</type>
<value>EUR>EUR.EONIA</value>
</Dimension>
<Dimension>
<type>ValueA_0</type>
<value>87.90199815542161</value>
</Dimension>
<RegionValueSet>
<Value>239.11331582</Value>
<DsShiftPerHzShift>1.7732635616468646</DsShiftPerHzShift>
<Credit>19940</Credit>
</RegionValueSet>
</RegionEntry>
</Region>
<Region>
<RegionID>EMEA</RegionID>
<RegionEntry>
<Dimension>
<type>Currency</type>
<value>EUR</value>
</Dimension>
<Dimension>
<type>ValueA_0</type>
<value>-7.300000000002148</value>
</Dimension>
<RegionValueSet>
<Value>0.01664004</Value>
<Benchmark>EUR.1M3M.1B</Benchmark>
</RegionValueSet>
</RegionEntry>
<RegionEntry>
<Dimension>
<type>Currency</type>
<value>EUR</value>
</Dimension>
<Dimension>
<type>ValueA_0</type>
<value>-8.000000000003963</value>
</Dimension>
<RegionValueSet>
<Value>-0.00057985</Value>
<Benchmark>EUR.1M3M.1M</Benchmark>
</RegionValueSet>
</RegionEntry>
<RegionEntry>
<Dimension>
<type>Currency</type>
<value>EUR</value>
</Dimension>
<Dimension>
<type>ValueA_0</type>
<value>-9.400000000007434</value>
</Dimension>
<RegionValueSet>
<Value>0</Value>
<Benchmark>EUR.1M3M.3M</Benchmark>
</RegionValueSet>
</RegionEntry>
实际的xml要大得多,并且EMEA RegionID标记内有不同数量的RegionEntries。我基本上需要搜索xml并拉回RegionID = EMEA的Region中的所有标签。我需要从xml的这个分支中提取所有数据。 I.E我需要获取所有尺寸,值,类型,基准值并将它们作为列转储到文件中。
有人可以建议我如何用clojure xml做到这一点?
解析xml之后我尝试下面的方法来获取维度/值标记值:
regions (zf/xml-> xmlmap :countryResults :countryResult :countryregions :regions :region)
regions1(for [region regions :let [x (zf/xml-> region :region :regionID)]
:when (some (zf/text= "EMEA") x)]
{:section (zf/xml1-> region :regionEntry :Dimension :value)})
非常感谢有关如何做到这一点的任何建议
答案 0 :(得分:0)
根据您的输出要求,这有用吗?
(def data (zip/xml-zip (xml/parse _INPUT_)))
(for [region (xml-> data
:countryResult :countryRegions :Regions :Region)
:when (= (xml1-> region :RegionID text) "EMEA")
entry (xml-> region :RegionEntry)]
{:region-value-sets (for [region-value-set (xml-> entry :RegionValueSet)]
{:benchmark (xml1-> region-value-set :Benchmark text)
:value (xml1-> region-value-set :Value text)})
:dimensions (for [dimension (xml-> entry :Dimension)]
{:type (xml1-> dimension :type text)
:value (xml1-> dimension :value text)})})
;({:region-value-sets ({:benchmark "EUR.1M3M.1B", :value "0.01664004"}),
; :dimensions
; ({:type "Currency", :value "EUR"}
; {:type "ValueA_0", :value "-7.300000000002148"})}
; {:region-value-sets
; ({:benchmark "EUR.1M3M.1M", :value "-0.00057985"}),
; :dimensions
; ({:type "Currency", :value "EUR"}
; {:type "ValueA_0", :value "-8.000000000003963"})}
; {:region-value-sets ({:benchmark "EUR.1M3M.3M", :value "0"}),
; :dimensions
; ({:type "Currency", :value "EUR"}
; {:type "ValueA_0", :value "-9.400000000007434"})})
我没有在基本拉链函数之上创建任何辅助函数,但它们可能会稍微清理一下代码。