Python 获取XML节点的文本,包括子节点(或类似的内容)
我必须从xml节点及其子节点中获取纯文本,或者这些奇怪的内部标记是什么: 示例节点:Python 获取XML节点的文本,包括子节点(或类似的内容),python,xml,Python,Xml,我必须从xml节点及其子节点中获取纯文本,或者这些奇怪的内部标记是什么: 示例节点: <BookTitle> <Emphasis Type="Italic">Z</Emphasis> = 63 - 100 </BookTitle> 记住,这只是一个例子!BookTitle节点中可能有任何类型的“子节点”,我所需要的只是BookTitle中的纯文本 我试过: tagtext = root.find('.//BookTitle').text pri
<BookTitle>
<Emphasis Type="Italic">Z</Emphasis>
= 63 - 100
</BookTitle>
记住,这只是一个例子!BookTitle节点中可能有任何类型的“子节点”,我所需要的只是BookTitle中的纯文本
我试过:
tagtext = root.find('.//BookTitle').text
print tagtext
但是.text无法处理这种奇怪的xml节点,并返回“NoneType”
问候和感谢 这不是
书名
节点的文本
,而是强调
节点的尾部
。所以你应该做一些类似的事情:
def parse(el):
text = el.text.strip() + ' ' if el.text.strip() else ''
for child in el.getchildren():
text += '{0} {1}\n'.format(child.text.strip(), child.tail.strip())
return text
这给了你:
>>> root = et.fromstring('''
<BookTitle>
<Emphasis Type="Italic">Z</Emphasis>
= 63 - 100
</BookTitle>''')
>>> print parse(root)
Z = 63 - 100
>>root=et.fromstring(“”)
Z
= 63 - 100
''')
>>>打印解析(根)
Z=63-100
以及:
>>> root = et.fromstring('''
<BookTitle>
Mtn
<Emphasis Type="Italic">Z</Emphasis>
= 74 - 210
</BookTitle>''')
>>> print parse(root)
Mtn Z = 74 - 210
>>root=et.fromstring(“”)
Mtn
Z
= 74 - 210
''')
>>>打印解析(根)
Mtn Z=74-210
这应该给你一个基本的想法怎么做
更新:修复了空格…您可以使用minidom解析器。以下是一个例子:
from xml.dom import minidom
def strip_tags(node):
text = ""
for child in node.childNodes:
if child.nodeType == doc.TEXT_NODE:
text += child.toxml()
else:
text += strip_tags(child)
return text
doc = minidom.parse("<your-xml-file>")
text = strip_tags(doc)
从xml.dom导入minidom
def条带标签(节点):
text=“”
对于node.childNodes中的子节点:
如果child.nodeType==doc.TEXT\u节点:
text+=child.toxml()
其他:
文本+=条带标签(子项)
返回文本
doc=minidom.parse(“”)
文本=带标签(文件)
strip_tags递归函数将浏览xml树并按顺序提取文本。谢谢,我在尾部为空或文本为空时出错,所以我这样做了:
def parse(el):text=''if el.text:text=el.text.strip()for child in el.getchildren():if child.text:text+=child.text.strip()if child.tail:text+=child.tail.strip()返回文本
,该文本似乎正在工作。如果我可以简化,请告诉我:)是的,你必须检查尾部
或文本
是否为无
,我忘了包括该检查。我从你的例子中假设它们永远存在。
>>> root = et.fromstring('''
<BookTitle>
Mtn
<Emphasis Type="Italic">Z</Emphasis>
= 74 - 210
</BookTitle>''')
>>> print parse(root)
Mtn Z = 74 - 210
from xml.dom import minidom
def strip_tags(node):
text = ""
for child in node.childNodes:
if child.nodeType == doc.TEXT_NODE:
text += child.toxml()
else:
text += strip_tags(child)
return text
doc = minidom.parse("<your-xml-file>")
text = strip_tags(doc)