2011-08-01 12 views
2

我想分析從XML file.Consider文本,我有一個file.xml解析XML

<s id="1792387-2">Castro Verde is situated in the Baixo Alentejo Subregion within a territory known locally as the Campo Branco (English: White Plains).</s> 

我如何可以提取從上面的線以下文本的幾行:

Castro Verde is situated in the Baixo Alentejo Subregion within a territory known locally as the Campo Branco (English: White Plains). 

在對文字進行一些更改之後,我希望返回帶有相同標記的更改文本,如下所示。

<s id="1792387-2"> Changed Text </s> 

任何建議please.Thanks!謝謝!

+2

什麼到底是你的問題? –

+0

你想解析文本,XML還是兩者? – Legolas

+0

是的,我想分析文本 –

回答

5

LXML使這特別容易。

>>> from lxml import etree 
>>> text = '''<s id="1792387-2">Castro Verde is situated in the Baixo Alentejo Subregion within a territory known locally as the Campo Branco (English: White Plains).</s>''' 
>>> def edit(s): 
...  return 'Changed Text' 
... 
>>> t = etree.fromstring(text) 
>>> t.text = edit(t.text) 
>>> etree.tostring(t) 
'<s id="1792387-2">Changed Text</s>' 
+0

非常感謝! –

+0

越來越回溯'回溯(最近最後一次通話): 文件「」,1號線,在 builtins.ImportError:無模塊名爲lxml' –

+1

@Blue冰:LXML不是一個Python內置模塊,你有分開安裝。 http://lxml.de –

1

使用DOM包(Python中的一部分)http://docs.python.org/py3k/library/xml.dom.minidom.html解析XML是我最喜歡的:

import xml.dom.minidom 
d = xml.dom.minidom.parseString("<s id=\"1792387-2\">Castro Verde is situated in the Baixo Alentejo Subregion within a territory known locally as the Campo Branco (English: White Plains).</s>") 
oldText = d.childNodes[0].childNodes[0].data 
d.childNodes[0].childNodes[0].data = "Changed text" 
d.toxml() 

但是,這並不能幫助你分析文本,所以我不知道你到底想有什麼。

+0

我想從上述行中提取以下文本: 'Castro Verde位於本地稱爲Campo Branco(英語:White Plains)的領土內的Baixo Alentejo分區域。' –

+0

我已更新答案創建一個變量oldText。 – Legolas

4

有解析XML一對夫婦STDLIB方法......但總的來說ElementTree是最簡單的:

from xml.etree import ElementTree 
from StringIO import StringIO 
doc = ElementTree.parse(StringIO("""<doc><s id="1792387-2">Castro…</s><s id="1792387-3">Other stuff</s></doc>""")) 
for elem in doc.findall("s"): 
    print "Text:", elem.text 
    elem.text = "new text" 
    print "New:", ElementTree.dump(elem) 

如果你的XML是從一個文件來了,你可以使用:

f = open("path/to/foo.xml") 
doc = ElementTree.parse(f) 
f.close() 
… use `doc` … 
+0

請您一起來看看下面的回溯'回溯(最近通話最後一個): 文件「」,1號線,在 builtins.ImportError:沒有名爲StringIO' –

+0

您正在使用什麼版本的Python模塊? ('python --version') –

+0

Python 2.6 ..... –