TA的每日心情 | 无聊 2019-1-1 20:10 |
|---|
签到天数: 31 天 [LV.5]常住居民I
|
发表于 2018-12-26 10:02:26
|
显示全部楼层
这问题用 XPath 可以不用这么烧脑,用正则表达式则是把简单事情复杂化了,附 python 程序实现,依赖 lxml 库。
0 w6 A' J4 h/ u' m1 G0 P
6 f1 ~! W/ ?% g+ S7 t/ w; Z- #!/usr/bin/env python2
5 C# L- i& m$ l( }3 s1 A - # -*- coding: utf-8 -*-
( F5 o3 l V A' H$ N - """' ?4 v- o4 |/ p" R" R1 ?
- File: replace_tilde_with_title.py
9 M+ W8 i! }- p% f' H - Author: zzhirong; c* j5 U7 s( m5 |4 E* {1 Y0 ?; u4 @
- Email: [email protected]
: B5 m$ o' L# l: @ r - Description: 替换 span 下的 ~ 为 d:entry 的 d:title 属性+ x I7 R- _: n$ x
- """
) w! y7 b+ o9 ]1 I% c$ F5 V$ g6 T - _5 B7 x& M/ K* _1 |
- from lxml import etree" Q+ b% ?( i1 q1 ~9 h
/ d& ~& [- ]3 g- s = """<?xml version="1.0" encoding="UTF-8"?>8 w: H Y. ~! F$ L. l
- <d:dictionary xmlns="http://www.w3.org/1999/xml" xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng">4 G" U! Y2 c% u/ C# s
- <d:entry id="_38ja" d:title="xxx">2 O, k3 h2 Y4 Q, L$ J% Q6 Q
- <d:index d:value="steal" d:title="steal"/><span class="hw">steal</span><br/>
$ D1 E$ M" {. i) j - <span class="ex">~ a visit <span class="tag1">(an interview)</span> </span><span class="ex_c">测试<span class="tag1">(测试)</span></span>
) `/ ]" h' j* ~) G$ T - <span class="ex">~ a kiss </span><span class="ex_c">测试</span>
* V( J. @) r( H# T5 @. u - <span class="ex">~ rides on the train </span><span class="ex_c">测试</span>+ b. u8 U' E& _% v3 D( }6 S7 I; h/ L1 {
- </d:entry>
8 G3 w' I: R o& {% R8 x+ y - </d:dictionary>7 t! `/ F& F; J( B6 J9 ?! h) s
- """& X% G4 y7 {, ^& P/ J. N
& P/ H2 J- L) W) p% B- d- xml = etree.XML(s)- }2 q. b6 R+ I- z. L
- D_NS = xml.nsmap["d"]
) @6 D. ] l" ~! e1 @+ W) _5 K U+ F - XML_NS = xml.nsmap[None]
/ Z2 X7 d6 g9 i# w. w
+ {4 t( p$ D) i- for entry in xml.xpath("//d:entry", namespaces={"d": xml.nsmap["d"]}):
! h' r3 r5 W$ Z) T' d! j - title = entry.get("{%s}title" % D_NS, "")
4 I$ u- w+ S' I+ M: \( l# i - for span in entry.iterfind("./{%s}span" % XML_NS):
0 A2 p3 J, O2 p" u - span.text = span.text.replace("~", title)
& U g: B" |; a2 V - print(etree.tostring(xml))
0 y. N2 V9 x2 u% d9 s
复制代码 ( ?1 E! P6 a, ^/ k" J/ k" L
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
|