python-3.x - 使用 lxml 解析 xml 时在标记中保留命名空间前缀
问题描述
我有一个如下的xml。很少有以ce
example为前缀的标签<ce:title>
。当我使用 xpath 运行如下代码时,在输出中将<ce:title>
替换为<title>
. 我确实在 SO 上看到了其他链接,例如如何在使用 lxml 解析 HTML 时保留名称空间信息?但不确定在何处以及如何添加命名空间详细信息。
有人可以建议吗?如何保留<ce:title>
以下 xml?
from lxml import html
from lxml.etree import tostring
with open('102277033304.xml', encoding='utf-8') as file_object:
xml = file_object.read().strip()
root = html.fromstring(xml)
for element in root.xpath('//item/book/pages/*'):
html = tostring(element, encoding='utf-8')
print(html)
XML:
<item>
<book>
<pages>
<page-info>
<page>
<ce:title>Chapter 1</ce:title>
<content>Welcome to Chapter 1</content>
</page>
<page>
<ce:title>Chapter 2</ce:title>
<content>Welcome to Chapter 2</content>
</page>
</page-info>
<page-fulltext>Published in page 1</page-fulltext>
<page-info>
<page>
<ce:title>Chapter 1</ce:title>
<content>Welcome to Chapter 1</content>
</page>
<page>
<ce:title>Chapter 2</ce:title>
<content>Welcome to Chapter 2</content>
</page>
</page-info>
<page-fulltext>Published in page 2</page-fulltext>
<page-info>
<page>
<ce:title>Chapter 1</ce:title>
<content>Welcome to Chapter 1</content>
</page>
<page>
<ce:title>Chapter 2</ce:title>
<content>Welcome to Chapter 2</content>
</page>
</page-info>
<page-fulltext>Published in page 3</page-fulltext>
</pages>
</book>
</item>
解决方案
这可能是由于您使用 html 解析器来读取 xml 造成的。
试试这样:
from lxml import etree
root = etree.XML(xml)
for element in root.xpath('//item/book/pages/*'):
xml = etree.tostring(element, encoding='utf-8')
print(xml)
这应该会给你预期的输出。
推荐阅读
- python - GEKKO AttributeError : sos1
- google-cloud-platform - google cloud vpc绑定外网ip,但显示红色错误提示,无法删除修改
- python - 如何在 Jupyter Notebook 中运行 Python 2.7 环境?
- django - AttributeError 'NarrateUpdate' 对象没有属性 'object'
- javascript - offsetHeight、clientHeight 和 scrollHeight 没有给出正确的高度
- python - 使用 fileinput python 模块从文件中读取行时出现“'NoneType'对象不可迭代”错误
- kotlin - 如何防止将不同类型的 null 传递给函数
- php - 未定义变量:_get in
- ansible - ansible-playbook:无法使用 fileglob 在预期路径中找到子目录
- c - 返回全局结构的指针