首页 > 解决方案 > Python 无法从 xml 文档中获取所有信息

问题描述

我将'lxml'库与python一起使用,它会将一组标签内的所有文本返回给我,但不会返回另一组标签。例如,我的 xml 文档看起来像这样。

<?xml version="1.0" encoding="UTF-8" ?>
<TEXT><![CDATA[
Record date: 2067-05-03

   55 yo woman who presents for f/u 

]]></TEXT>
<TAGS>
<DATE id="P0" start="16" end="26" text="2067-05-03" comment="" />
<AGE id="P1" start="50" end="52" text="55" comment="" />

</TAGS>

我的问题是它正确检索了 <TEXT> 和 </TEXT> 之间的所有文本,但它没有正确检索 <TAGS> 和 </TAGS> 之间的文本,它只是说有一个 '\n'当我检查文本时,这里是我的代码:

import xml.etree.ElementTree as ET
tree = ET.parse(r'myXMLDocument.xml')
root = tree.getroot()
for c in root:
    print(c.text)

此外,

>>> root[1].text
'\n'

有没有办法让我把它还给我

<DATE id="P0" start="16" end="26" text="2067-05-03" comment="" />
<AGE id="P1" start="50" end="52" text="55" comment="" />

或者这不可能吗?

谢谢

标签: pythonxmllxml

解决方案


另一种方法。

from simplified_scrapy import  utils, SimplifiedDoc
xml = '''
<?xml version="1.0" encoding="UTF-8" ?>
<TEXT><![CDATA[
Record date: 2067-05-03

   55 yo woman who presents for f/u 

]]></TEXT>
<TAGS>
<DATE id="P0" start="16" end="26" text="2067-05-03" comment="" />
<AGE id="P1" start="50" end="52" text="55" comment="" />

</TAGS>
'''

doc  = SimplifiedDoc(xml)

print (doc.TAGS.html)
# Result:
'''
<DATE id="P0" start="16" end="26" text="2067-05-03" comment="" />
<AGE id="P1" start="50" end="52" text="55" comment="" />
'''

print (doc.select('TAGS').children)
# Result:
'''
[{'tag': 'DATE', 'id': 'P0', 'start': '16', 'end': '26', 'text': '2067-05-03', 'comment': '', 'html': ''}, {'tag': 'AGE', 'id': 'P1', 'start': '50', 'end': '52', 'text': '55', 'comment': '', 'html': ''}]
'''

print (doc.select('TAGS>DATE'))
# Result:
'''
{'tag': 'DATE', 'id': 'P0', 'start': '16', 'end': '26', 'text': '2067-05-03', 'comment': '', 'html': ''}
'''

推荐阅读