&引用;无效的标记名";在python中使用lxml创建元素时出错
我正在使用lxml创建一个xml文件,我的示例程序是:&引用;无效的标记名";在python中使用lxml创建元素时出错,python,xml,python-2.7,lxml,Python,Xml,Python 2.7,Lxml,我正在使用lxml创建一个xml文件,我的示例程序是: from lxml import etree import datetime dt=datetime.datetime(2013,11,30,4,5,6) dt=dt.strftime('%Y-%m-%d') page=etree.Element('html') doc=etree.ElementTree(page) dateElm=etree.SubElement(page,dt) outfile=open('somefile.xml',
from lxml import etree
import datetime
dt=datetime.datetime(2013,11,30,4,5,6)
dt=dt.strftime('%Y-%m-%d')
page=etree.Element('html')
doc=etree.ElementTree(page)
dateElm=etree.SubElement(page,dt)
outfile=open('somefile.xml','w')
doc.write(outfile)
我得到以下错误输出:
dateElm=etree.SubElement(page,dt)
File "lxml.etree.pyx", line 2899, in lxml.etree.SubElement (src/lxml/lxml.etree.c:62284)
File "apihelpers.pxi", line 171, in lxml.etree._makeSubElement (src/lxml/lxml.etree.c:14296)
File "apihelpers.pxi", line 1523, in lxml.etree._tagValidOrRaise (src/lxml/lxml.etree.c:26852)
ValueError: Invalid tag name u'2013-11-30'
我认为这是一个Unicode错误,
因此,尝试用如下代码更改“dt”的编码
str(dt)
unicode(dt).encode('unicode_escape')
dt.encocde('ascii','ignore')
dt.encode('ascii','decode')
还有其他一些,但没有一个起作用,并且生成了相同的错误消息。您会收到错误,因为元素名称在XML中不允许以数字开头。见和。名称的第一个字符必须是
NameStartChar
,这不允许使用数字
诸如…
之类的元素无效
诸如…
之类的元素正常
如果您的程序更改为使用ElementTree而不是lxml(
从xml.etree导入ElementTree作为etree
而不是从lxml导入etree),则没有错误。但我会认为这是一个错误。lxml做了正确的事情,ElementTree没有。它与Unicode无关。HTML中没有2013-11-30
标记。您可以使用time
标记:
#!/usr/bin/env python
from datetime import date
from lxml.html import tostring
from lxml.html.builder import E
datestr = date(2013, 11, 30).strftime('%Y-%m-%d')
page = E.html(
E.title("date demo"),
E('time', "some value", datetime=datestr))
with open('somefile.html', 'wb') as file:
file.write(tostring(page, doctype='<!doctype html>', pretty_print=True))
#/usr/bin/env python
起始日期时间导入日期
从lxml.html导入到字符串
从lxml.html.builder导入E
datestr=date(2013,11,30).strftime(“%Y-%m-%d”)
page=E.html(
E.标题(“日期演示”),
E('time','some value',datetime=datestr))
以open('somefile.html','wb')作为文件:
write(tostring(page,doctype='',pretty\u print=True))
能否添加输入XMl的相关片段?^我的XMl文件为空。我正在使用最后一行代码“doc.write(outfile)”编写输出,似乎您正在将日期作为标记写入。这就是你想做的吗?^A……是的。我写得像个值我在插入日期之前使用str(date)方法将日期元素更改为字符串..我用'xml.etree.ElementTree'尝试了同样的方法,效果很好。“lxml”可能有问题,但我不确定。如果我错了,请纠正我。使用str(dt)
没有帮助。在程序中的这一点上,dt
已经是一个字符串(返回值为datetime.strftime()
)。lxml拒绝2013-11-30
标记名时是正确的。@j.f.sebastian-这肯定是'xml.etree.ElementTree'上的错误,因为即使它将'date'格式保存到'xml'文件,如果我对保存的文件执行'xml.etree.ElementTree.parse('somefile.xml'),它也会显示解析错误。在“date”标记中添加一个额外的字符可以解决这个问题。谢谢你的帮助!!我的文件是“xml”,而不是“html”。所以,我可以将任何东西存储为标记,因为它是str(如果错误,请更正我)。如果我导入'xml.etree.ElementTree',我的代码运行良好,我不知道为什么在'lxml'@Chandrakant:1中会出现问题。如果文档实际上不是html,则不要使用roothtml
标记。这是误导。2.因为,ElementTree
接受您的输入是错误的lxml
按照XML规范中的定义工作。正如您所说,您的文件是“xml”,因此它必须遵循xml规范。