lxml - 我无法使用 nsmap 为 lxml 库添加标签
问题描述
我编写了一个函数来使用 lxml 库生成 Google Merchant RSS Feed
我有以下代码被缩短为单个标签:
from lxml import etree
def generate_xml(self):
nsmap = {
"g": "http://base.google.com/ns/1.0",
}
page = etree.Element('rss', nsmap=nsmap)
channel = etree.SubElement(page, 'channel')
channel_title = etree.SubElement(channel, 'title')
channel_title.text = "Test RSS 2.0 data feed template products"
channel_description = etree.SubElement(channel, 'description')
channel_description.text = "test data feed template."
channel_link = etree.SubElement(channel, 'link')
channel_link.text = "https://test-abcd.com"
item = etree.SubElement(channel, "item")
item_id = etree.SubElement(item, "id", nsmap=nsmap)
item_id.text = "123456789"
return etree.tostring(page, xml_declaration=True, encoding="utf-8")
该函数返回以下输出:
<?xml version='1.0' encoding='utf-8'?>
<rss xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>Test RSS 2.0 data feed template products</title>
<description>test data feed template.</description>
<link>https://test-abcd.com</link>
<item>
<id>123456789</id>
</item>
</channel>
</rss>
但它应该如下(<g:id>123456789</g:id>
):
<?xml version='1.0' encoding='utf-8'?>
<rss xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>Test RSS 2.0 data feed template products</title>
<description>test data feed template.</description>
<link>https://test-abcd.com</link>
<item>
<g:id>123456789</g:id>
</item>
</channel>
</rss>
解决方案
我找到了etree.QName()
用于构建合格名称的解决方案id
:
def generate_xml(self):
nsmap = {
"g": "http://base.google.com/ns/1.0",
}
page = etree.Element('rss', nsmap=nsmap)
channel = etree.SubElement(page, 'channel')
channel_title = etree.SubElement(channel, 'title')
channel_title.text = "Test RSS 2.0 data feed template products"
channel_description = etree.SubElement(channel, 'description')
channel_description.text = "test data feed template."
channel_link = etree.SubElement(channel, 'link')
channel_link.text = "https://test-abcd.com"
item = etree.SubElement(channel, "item")
item_id = etree.SubElement(item, etree.QName(nsmap.get("g"), 'id'))
item_id.text = "123456789"
return etree.tostring(page, xml_declaration=True, encoding="utf-8")
推荐阅读
- security - SMA390 RPC 端口对面向公众的 IP 没有响应
- javafx - 为什么按钮什么都不做?javafx
- python - 在 numpy 矩阵中搜索向量
- javascript - 如何在所有浏览器的滚动视图结束时启用弹跳效果?
- c# - 在 Visual Studio 中使用 DB2 选择 N 行
- node.js - Winston - MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏
- excel - 使用 isNumeric 从地址中提取邮政编码
- c - 仅使用小于 0xFF 的数字获取 0x55555555,| 和 <<
- python - 比较不同大小的数据框,如果满足条件则创建一个新的
- python - 将更改 png 图像文件清晰度的代码应用于整个图像文件?