Python 使用minidom获取xml标记之间的文本
我有这个示例xml文档片段Python 使用minidom获取xml标记之间的文本,python,xml,Python,Xml,我有这个示例xml文档片段 <root> <foo>bar</foo> <foo>baz</foo> </root> 酒吧 巴兹 我使用的是来自xml.dom的python的minidom方法。我正在阅读带有getElementsByTagName(“foo”)的标签。如何获取标签之间的文本?如果标签是嵌套的,我将如何获取这些标签?因此,如果需要获取文本,则可以执行以下操作: import xml.do
<root>
<foo>bar</foo>
<foo>baz</foo>
</root>
酒吧
巴兹
我使用的是来自xml.dom的python的minidom方法。我正在阅读带有getElementsByTagName(“foo”)的标签。如何获取标签之间的文本?如果标签是嵌套的,我将如何获取这些标签?因此,如果需要获取文本,则可以执行以下操作:
import xml.dom.minidom
document = "<root><foo>bar</foo><foo>baby</foo></root>"
dom = xml.dom.minidom.parseString(document)
def getText(nodelist):
rc = []
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc.append(node.data)
return ''.join(rc)
def handleTok(tokenlist):
texts = ""
for token in tokenlist:
texts += " "+ getText(token.childNodes)
return texts
foo = dom.getElementsByTagName("foo")
text = handleTok(foo)
print text
import xml.dom.minidom
document=“巴巴多斯”
dom=xml.dom.minidom.parseString(文档)
def getText(节点列表):
rc=[]
对于节点列表中的节点:
如果node.nodeType==node.TEXT\u节点:
rc.append(node.data)
返回“”。加入(rc)
def handleTok(令牌列表):
text=“”
对于令牌列表中的令牌:
text+=“”+getText(token.childNodes)
返回文本
foo=dom.getElementsByTagName(“foo”)
text=handleTok(foo)
打印文本
他们在网站上有一个很好的例子:
编辑:对于嵌套标记,请查看网站上的示例。以下是如何使用:
有人仍在使用DOM,这让我很痛苦,请查看
xml.etree.ElementTree
@serk这是一个稍微不同的问题。您应该编辑此答案。代码示例格式不正确,无法工作。问题之一是getElementsByTagName()
返回一个NodeList
,它没有data
属性。是的,我的错。我有点邋遢。现在一切都好了。是的,它起作用了。但是正如@mikerobi在上面所说的,xml.etree.ElementTree
是这些天的发展方向。。。
xml='''\
<root>
<foo>bar</foo>
<foo>baz</foo>
</root>'''
import xml.etree.ElementTree as ET
for child in ET.fromstring(xml):
print child.tag, child.text
foo bar
foo baz