xml解析

常会遇到需要对xml文件进行编辑修改的情况,尝试了一下使用python对其进行解析及修改。

# encoding:utf-8
import xml.etree.ElementTree as ET
from xml.dom.minidom import parseString
import codecs
import sys


def get_xml_dict(source_file_name, id_dict):
    tree = ET.parse(source_file_name)
    root = tree.getroot()
    fields = root.find('fields')
    for field in fields:
        items = field.findall('item')
        for item in items:
            id = item.get('id')
            desc = item.get('desc')
            id_dict[id] = desc


def write_macros_xml(macros_file_name, id_dict):
    macros = ET.Element('macros')
    for id in id_dict:
        macro = ET.SubElement(macros, 'macro')
        macro.set('id', id)
        macro.set('desc', id_dict[id])
    xml_dom = parseString(ET.tostring(macros))
    xml_content = xml_dom.toprettyxml('\t')

    xml_file = codecs.open(macros_file_name, "w+", 'utf-8-sig')
    xml_file.write(xml_content)
    xml_file.close()


if __name__ == "__main__":
    if len(sys.argv) < 3:
        print "Usage: stepmerge.py source_file_name macros_file_name"
        exit(-1)
    source_file_name = sys.argv[1]
    macros_file_name = sys.argv[2]

    id_dict = {}
    get_xml_dict(source_file_name, id_dict)
    write_macros_xml(macros_file_name, id_dict)

 

待解析的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<ufxstep>
	<packages>
		<package name="RspLogin" funcid="331100" desc="登录回报">
			<field name="RspLogin"/>
		</package>
		<package name="RspQryAccount" funcid="331155" desc="查询账户回报">
			<field name="Account"/>
		</package>
		<package name="RspClientSessionID" funcid="331480" desc="获取客户端连会话ID">
			<field name="RspClientSessionID"/>
		</package>
		<package name="RspClientAuth" funcid="331481" desc="客户端认证">
			<field name="RspClientAuth"/>
		</package>
		<package name="RspClientInfoSubmit" funcid="331482" desc="客户端系统信息上报">
			<field name="RspClientInfoSubmit"/>
		</package>
		<package name="RspQryInstrument" funcid="338000" desc="查询合约回报">
			<field name="Instrument"/>
		</package>
		
		<package name="RtnMarketData" funcid="620003" desc="实时行情主推">
			<field name="MarketData"/>
		</package>
	</packages> 
	<fields>
		<field name="RspLogin" desc="登录应答">
			<item id="init_date" desc="交易日期"/>
			<item id="sys_status" desc="系统状态"/>
			<item id="company_name" desc="公司名称"/>
			<item id="content_type" desc="银行号、市场类别"/>
			<item id="account_content" desc="输入内容"/>
			<item id="branch_no" desc="分支机构"/>
			<item id="client_id" desc="客户编号"/>
			<item id="client_name" desc="客户姓名"/>
			<item id="corp_client_group" desc="公司客户类别"/>
			<item id="corp_risk_level" desc="客户风险等级"/>
			<item id="corp_end_date" desc="客户风险到期日"/>
			<item id="valid_flag" desc="有效标志"/>
			<item id="fundaccount_count" desc="资产账号个数"/>
			<item id="fund_account" desc="资产账户"/>
			<item id="client_rights" desc="客户权限"/>
			<item id="last_op_entrust_way" desc="上次登录委托方式"/>
			<item id="last_op_station" desc="上次登录站点/电话"/>
			<item id="sysnode_id" desc="系统节点编号"/>
			<item id="user_token" desc="用户口令"/>
			<item id="error_no" desc="错误代码"/>
			<item id="error_info" desc="错误提示"/>
			<item id="asset_prop" desc="资产属性"/>
			<item id="product_flag" desc="产品标志"/>
			<item id="message_flag" desc="消息标志"/>
			<item id="tabconfirm_flag" desc="强制账单确认"/>
			<item id="last_date" desc="上次提成日期"/>
			<item id="session_no" desc="会话编号"/>
			<item id="foreign_flag" desc="境外标志"/>
		</field>
		<field name="Account" desc="账户">
			<item id="client_branch_no" desc="客户开户营业部"/>
			<item id="branch_no" desc="分支机构"/>
			<item id="client_id" desc="客户编号"/>
			<item id="fund_account" desc="资产账户"/>
			<item id="client_rights" desc="客户权限"/>
			<item id="main_flag" desc="主账标志"/>
			<item id="product_flag" desc="产品标志"/>
			<item id="asset_prop" desc="资产属性"/>
			<item id="sysnode_id" desc="系统节点编号"/>
			<item id="position_str" desc="定位串"/>
			<item id="uft_sysnode_id" desc="UFT系统节点编号"/>
			<item id="en_ext_rights" desc="客户扩权限串"/>
			<item id="profit_flag" desc="盈亏计算方式"/>
		</field>
		<field name="RspClientSessionID" desc="客户端会话ID">
			<item id="session_id" desc="会话号"/>
		</field>
		<field name="RspClientAuth" desc="客户端认证">
		</field>
		<field name="RspClientInfoSubmit" desc="客户端系统信息上报">
		</field>
		<field name="Instrument" desc="合约">
			<item id="exchange_type" desc="交易类别"/>
			<item id="option_code" desc="期权合约编码"/>
			<item id="optcontract_id" desc="合约交易代码"/>
			<item id="option_name" desc="期权合约简称"/>
			<item id="option_type" desc="期权种类"/>
			<item id="stock_type" desc="证券类别"/>
			<item id="stock_code" desc="证券代码"/>
			<item id="money_type" desc="币种代码"/>
			<item id="amount_per_hand" desc="合约乘数"/>
			<item id="option_mode" desc="期权执行方式"/>
			<item id="opt_close_price" desc="合约前收盘价"/>
			<item id="close_price" desc="昨收盘"/>
			<item id="opt_up_price" desc="上限价"/>
			<item id="opt_down_price" desc="下限价"/>
			<item id="exercise_price" desc="行权价格"/>
			<item id="initper_balance" desc="单位保证金"/>
			<item id="limit_high_amount" desc="单笔限价申报最高数量"/>
			<item id="limit_low_amount" desc="单笔限价申报最低数量"/>
			<item id="mkt_high_amount" desc="单笔市价申报最高数量"/>
			<item id="mkt_low_amount" desc="单笔市价申报最低数量"/>
			<item id="begin_date" desc="起始日期"/>
			<item id="end_date" desc="到期日期"/>
			<item id="exe_begin_date" desc="行权开始日期"/>
			<item id="exe_end_date" desc="行权截止日期"/>
			<item id="optcode_status" desc="期权代码状态"/>
			<item id="opt_updated_status" desc="期权合约调整标志"/>
			<item id="option_version" desc="期权合约版本号"/>
			<item id="opt_open_status" desc="期权开仓状态"/>
			<item id="option_flag" desc="期权合约挂牌标志"/>
			<item id="opt_final_status" desc="期权合约临近到期标志"/>
			<item id="opt_price_step" desc="最小价差(元)"/>
			<item id="position_str" desc="定位串"/>
		</field>
		<field name="MarketData" desc="实时行情">
			<item id="hqsrc_type" desc="行情源类型"/>
			<item id="exchange_type" desc="交易类别"/>
			<item id="option_code" desc="期权合约编码"/>
			<item id="option_name" desc="期权合约简称"/>
			<item id="close_price" desc="昨收盘"/>
			<item id="open_price" desc="开盘价"/>
			<item id="business_balance" desc="成交金额"/>
			<item id="high_price" desc="最高价"/>
			<item id="low_price" desc="最低价"/>
			<item id="last_price" desc="最新价"/>
			<item id="business_amount" desc="成交数量"/>
			<item id="buy_price1" desc="申买价1"/>
			<item id="buy_price2" desc="申买价2"/>
			<item id="buy_price3" desc="申买价3"/>
			<item id="buy_price4" desc="申买价4"/>
			<item id="buy_price5" desc="申买价5"/>
			<item id="buy_price6" desc="申买价6"/>
			<item id="buy_price7" desc="申买价7"/>
			<item id="buy_price8" desc="申买价8"/>
			<item id="buy_price9" desc="申买价9"/>
			<item id="buy_price10" desc="申买价10"/>
			<item id="sale_price1" desc="申卖价1"/>
			<item id="sale_price2" desc="申卖价2"/>
			<item id="sale_price3" desc="申卖价3"/>
			<item id="sale_price4" desc="申卖价4"/>
			<item id="sale_price5" desc="申卖价5"/>
			<item id="sale_price6" desc="申卖价6"/>
			<item id="sale_price7" desc="申卖价7"/>
			<item id="sale_price8" desc="申卖价8"/>
			<item id="sale_price9" desc="申卖价9"/>
			<item id="sale_price10" desc="申卖价10"/>
			<item id="buy_amount1" desc="申买量1"/>
			<item id="buy_amount2" desc="申买量2"/>
			<item id="buy_amount3" desc="申买量3"/>
			<item id="buy_amount4" desc="申买量4"/>
			<item id="buy_amount5" desc="申买量5"/>
			<item id="buy_amount6" desc="申买量6"/>
			<item id="buy_amount7" desc="申买量7"/>
			<item id="buy_amount8" desc="申买量8"/>
			<item id="buy_amount9" desc="申买量9"/>
			<item id="buy_amount10" desc="申买量10"/>
			<item id="sale_amount1" desc="申卖量1"/>
			<item id="sale_amount2" desc="申卖量2"/>
			<item id="sale_amount3" desc="申卖量3"/>
			<item id="sale_amount4" desc="申卖量4"/>
			<item id="sale_amount5" desc="申卖量5"/>
			<item id="sale_amount6" desc="申卖量6"/>
			<item id="sale_amount7" desc="申卖量7"/>
			<item id="sale_amount8" desc="申卖量8"/>
			<item id="sale_amount9" desc="申卖量9"/>
			<item id="sale_amount10" desc="申卖量10"/>
			<item id="exchange_index" desc="交易指数"/>
			<item id="close_exchange_index" desc="闭市索引"/>
			<item id="pre_square_price" desc="昨日结算价"/>
			<item id="square_price" desc="结算价"/>
			<item id="auction_price" desc="动态参考价格"/>
			<item id="auction_amount" desc="虚拟匹配数量"/>
			<item id="undrop_amount" desc="未平仓数量"/>
			<item id="optexch_status" desc="期权交易状态"/>
			<item id="opt_open_restriction" desc="期权实时开仓限制"/>
			<item id="time_stamp" desc="时间戳"/>
		</field>
	</fields>
</ufxstep>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值