【发布时间】:2014-03-14 03:56:06
【问题描述】:
我有一个 xml 文件,我需要根据每个 p 元素的 dfn 文本替换类属性的值。所以,我有一个这种 html 文件:
<html>
<head></head>
<body>
<p class ='person'><dfn>New-York</dfn>
<p class = 'place'><dfn>John Doe</dfn>
</body>
</html>
我想解析这个文档并将类属性的所有值替换为正确的值。为了定义 dfn-text 是一个地方还是一个人,我的脚本中已经有一组条件。所以,我想获得与输出相同的 html 文件,但具有正确的类:
<html>
<head></head>
<body>
<p class ='**place**'><dfn>New-York</dfn>
<p class = '**person**'><dfn>John Doe</dfn>
</body>
</html>
到目前为止,我试图实现它寻找dfn的祖先p及其属性'class',然后尝试用replace()函数替换它,但它并没有真正起作用:
filename = open('file.html', 'r+')
tree = etree.parse(filename)
def f1():
for dfn in tree.getiterator('dfn'):
def_text = dfn.text
if def_text == 'New York' #a list of conditions in my real script, New York is an example only):
class1 = ''.join(dfn.xpath('ancestor::p//@class')
filename.write(class1.replace('person', 'place'))
我得到的只是同一个文件,但在末尾附加了一行“place”...
【问题讨论】:
-
“我得到的只是同一个文件,但在结尾附加了一行 'place'...” – 当然这就是你得到的全部,因为你并没有真正在任何地方操作 XML - 您所做的只是将某些内容写入以
r+模式打开的文本文件,那么您如何期望结果是其他任何内容......? -
哦,您对我的问题和讽刺评论的减号非常有帮助!我已经可以看到它不起作用。我希望能有更好的人来回答一些有用的问题。