在R中解析FIXML

q9rjltbz  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(121)

我一直在寻找一种在R中解析FIXML的方法。似乎所有的结果都只用于XML格式,而不是数据包含在标签中的FIXML。这里有一个我想解析的示例文件,似乎XML,XML 2库不是为这种格式构建的。

<FIXML v="FIX50SP2" s="20080115">
    <SecDef RptID="3400001" ReqID="1234567" RspTyp="100">
    <Hdr SID="CME" TID="BRKR" SSub="CPAPI " TSub="user" />
    <Instrmt ID="CS" Src="H" ProdCmplx="ENRGY" SecTyp="FUT" MinPxIncr="0.01"
                UOM="Bbl" UOMQty="1000" PxUOM="Bbl" PxUOMQty="1" SettlMeth="C"
                PxQteMeth="STD" ListMeth="0" TmUnit="Mo" Exch="NYMEX" Desc="
                WTI Calendar Swap" />
    <InstrmtExt>
        <Attrb Typ="29" Val="Y" />
        <Attrb Typ="25" Val="1" />
        <Attrb Typ="24" Val="2" />
        <Attrb Typ="24" Val="12" />
    </InstrmtExt>
    </SecDef>
</FIXML>

就像我之前说的,我已经尝试了很多来自XML和XML 2库的解决方案,但似乎没有一个解决方案能正确地从FIX格式中提取数据。
从上面的例子中,我希望结果是这样的df:
| RptID|ReqID|RspType|SID|每日三次|SSub|TSub|仪器ID|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 3400001|小行星1234567|一百|日冕物质抛射|制动器|CPAPI|CS||
你可以想象一下。一旦它下降到,它会略有不同:
| 属性类型=“29”|属性典型值=“25”|属性类型=“24”|属性类型=“24”|
| 是|1|第二章|十二岁|
任何想法都欢迎。

oyxsuwqo

oyxsuwqo1#

“xml2”库可以很容易地解析出属性和值。它只需要几个额外的步骤来从属性列表移动到数据框。

library(xml2)
library(dplyr)
    
page <- read_xml('<FIXML v="FIX50SP2" s="20080115">
   <SecDef RptID="3400001" ReqID="1234567" RspTyp="100">
      <Hdr SID="CME" TID="BRKR" SSub="CPAPI " TSub="user" />
         <Instrmt ID="CS" Src="H" ProdCmplx="ENRGY" SecTyp="FUT" MinPxIncr="0.01"
         UOM="Bbl" UOMQty="1000" PxUOM="Bbl" PxUOMQty="1" SettlMeth="C"
         PxQteMeth="STD" ListMeth="0" TmUnit="Mo" Exch="NYMEX" Desc="WTI Calendar Swap"/>
            <InstrmtExt>
            <Attrb Typ="29" Val="Y" />
            <Attrb Typ="25" Val="1" />
            <Attrb Typ="24" Val="2" />
            <Attrb Typ="24" Val="12" />
            </InstrmtExt>
            </SecDef>
            </FIXML>')

 SecDef <- page %>% xml_find_all(".//SecDef") %>% xml_attrs() %>% bind_rows()
 Hdr <- page %>% xml_find_all(".//Hdr") %>% xml_attrs() %>% bind_rows()
 Instrmt <- page %>% xml_find_all(".//Instrmt") %>% xml_attrs() %>% bind_rows()
 Attrb <- page %>% xml_find_all(".//Attrb") %>% xml_attrs() %>% bind_rows()

相关问题