Python XML解析。

遇到这种XML解析不知该如何下手,请教一下。

<?xml version="1.0" encoding="utf-8"?>

<string xmlns="http://tempuri.org/&quot;>
<option value="">请选择大区</option>
<option value="4011">微信1区-绚烂刀锋</option>
<option value="4012">微信2区-智慧之拳</option>
<option value="4013">微信3区-大唐名探</option>
<option value="4014">微信4区-冰雪之华</option>
<option value="4015">微信5区-逆流之时</option>
<option value="4016">微信6区-破釜沉舟</option>
<option value="4017">微信7区-天命之女</option>
<option value="4018">微信8区-女帝辉光</option>
<option value="4019">微信9区-女帝威严</option>
<option value="4020">微信10区-生杀予夺</option>
<option value="4021">微信11区-师道尊严</option>
<option value="4022">微信12区-圣人训诫</option>
<option value="4023">微信13区-圣人之威</option>
<option value="4024">微信14区-舍生忘死</option>
</string>

你期待的结果是什么?实际看到的错误信息又是什么?

要求解析的结果:4011  ---  微信1区-绚烂刀锋

图片描述

阅读 2.8k
1 个回答

用bs4解析:

from bs4 import BeautifulSoup

s = """<?xml version="1.0" encoding="utf-8"?>

<string xmlns="http://tempuri.org/&quot;> 
<option value="">请选择大区</option>
<option value="4011">微信1区-绚烂刀锋</option>
<option value="4012">微信2区-智慧之拳</option>
<option value="4013">微信3区-大唐名探</option>
<option value="4014">微信4区-冰雪之华</option>
<option value="4015">微信5区-逆流之时</option>
<option value="4016">微信6区-破釜沉舟</option>
<option value="4017">微信7区-天命之女</option>
<option value="4018">微信8区-女帝辉光</option>
<option value="4019">微信9区-女帝威严</option>
<option value="4020">微信10区-生杀予夺</option>
<option value="4021">微信11区-师道尊严</option>
<option value="4022">微信12区-圣人训诫</option>
<option value="4023">微信13区-圣人之威</option>
<option value="4024">微信14区-舍生忘死</option>
</string>"""

root = BeautifulSoup(s)
results = '\n'.join(
    n.attrs['value'] + ' --- ' + n.text
    for n in root.select("option")
)
print(results)

用正则解析:

import re

s = """<?xml version="1.0" encoding="utf-8"?>

<string xmlns="http://tempuri.org/&quot;> 
<option value="">请选择大区</option>
<option value="4011">微信1区-绚烂刀锋</option>
<option value="4012">微信2区-智慧之拳</option>
<option value="4013">微信3区-大唐名探</option>
<option value="4014">微信4区-冰雪之华</option>
<option value="4015">微信5区-逆流之时</option>
<option value="4016">微信6区-破釜沉舟</option>
<option value="4017">微信7区-天命之女</option>
<option value="4018">微信8区-女帝辉光</option>
<option value="4019">微信9区-女帝威严</option>
<option value="4020">微信10区-生杀予夺</option>
<option value="4021">微信11区-师道尊严</option>
<option value="4022">微信12区-圣人训诫</option>
<option value="4023">微信13区-圣人之威</option>
<option value="4024">微信14区-舍生忘死</option>
</string>"""

pattern = '<option value="(\w+)">([\w-]+)</option>'
results = '\n'.join(
    n[0] + ' --- ' + n[1]
    for n in re.findall(pattern, s)
)
print(results)

运行结果:

4011 --- 微信1区-绚烂刀锋
4012 --- 微信2区-智慧之拳
4013 --- 微信3区-大唐名探
4014 --- 微信4区-冰雪之华
4015 --- 微信5区-逆流之时
4016 --- 微信6区-破釜沉舟
4017 --- 微信7区-天命之女
4018 --- 微信8区-女帝辉光
4019 --- 微信9区-女帝威严
4020 --- 微信10区-生杀予夺
4021 --- 微信11区-师道尊严
4022 --- 微信12区-圣人训诫
4023 --- 微信13区-圣人之威
4024 --- 微信14区-舍生忘死
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题