Python 如何使用lxml将名称空间包含到xml文件中?

Python 如何使用lxml将名称空间包含到xml文件中?,python,xml,lxml,Python,Xml,Lxml,我正在使用python和lxml库从头创建一个新的xml文件 <route xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.xxxx" version="1.1" xmlns:stm="http://xxxx/1/0/0" xsi:schemaLocation="http://xxxx/1/0/0 stm_extensions.xsd"> 存在语法错误:语法无效 我怎样才能做到这一点?以

我正在使用python和lxml库从头创建一个新的xml文件

<route xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.xxxx" version="1.1"
xmlns:stm="http://xxxx/1/0/0"
xsi:schemaLocation="http://xxxx/1/0/0 stm_extensions.xsd">
存在语法错误:语法无效


我怎样才能做到这一点?

以下是如何做到的:

from lxml import etree

attr_qname = etree.QName("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation")
nsmap = {None: "http://www.xxxx",
         "stm": "http://xxxx/1/0/0",
         "xsi": "http://www.w3.org/2001/XMLSchema-instance"}

root = etree.Element("route", 
                     {attr_qname: "http://xxxx/1/0/0 stm_extensions.xsd"},
                     version="1.1", 
                     nsmap=nsmap)

print etree.tostring(root)
此代码的输出(为了可读性,添加了换行符):


主要的“技巧”是使用
QName
创建
xsi:schemaLocation
属性。名称中带有冒号的属性不能用作关键字参数的名称


我已经将
xsi
前缀的声明添加到了
nsmap
,但实际上可以省略它。lxml为一些众所周知的名称空间uri定义了默认前缀,包括
xsi
for
http://www.w3.org/2001/XMLSchema-instance

可能与@stovfl重复:我不认为它是重复的。这个问题是关于创建一个新的XML文档;另一个是关于解析/操作现有文档。
from lxml import etree

attr_qname = etree.QName("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation")
nsmap = {None: "http://www.xxxx",
         "stm": "http://xxxx/1/0/0",
         "xsi": "http://www.w3.org/2001/XMLSchema-instance"}

root = etree.Element("route", 
                     {attr_qname: "http://xxxx/1/0/0 stm_extensions.xsd"},
                     version="1.1", 
                     nsmap=nsmap)

print etree.tostring(root)
<route xmlns:stm="http://xxxx/1/0/0"
       xmlns="http://www.xxxx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xxxx/1/0/0 stm_extensions.xsd"
       version="1.1"/>