python - 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="" />
或者这不可能吗?
谢谢
解决方案
另一种方法。
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': ''}
'''
推荐阅读
- xamarin.android - Xamarin 表单:如何为 xamarin 表单 android 启动屏幕设置背景颜色?
- oracle - 如何根据Oracle中另一个表的值生成一个表的选择查询
- java - 找不到eclipse项目帮帮我
- php - 使用 EVO-Snap 的 EVO Snap 支付网关 - PHP HostedPayments 库
- c# - 在 Entity Framework Core 中建立关系
- optimization - 每个维度具有不同步长的 scipy L-BFGS-B 优化器
- visual-c++ - 如何对 UWP 组件中的非导出类进行单元测试 (C++/WinRT)
- spring-integration - Spring Integration Java DSL:如何在 JUnit 中运行集成流程?
- android - 后台执行限制和前台服务被杀死
- c++ - 为什么我的编译器无法识别“Bond() = default;”?