python - 在 python 中使用 lxml 创建元素时出现 "Invalid tag name"错误

标签 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','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' 的编码
  1. str(dt)
  2. unicode(dt).encode('unicode_escape')
  3. dt.encocde('ascii','ignore')
  4. dt.encode('ascii','decode')

还有一些其他的,但都没有工作,并且生成了相同的错误消息。

最佳答案

您收到错误是因为元素名称在 XML 中不允许以数字开头。参见 http://www.w3.org/TR/xml/#sec-common-synhttp://www.w3.org/TR/xml/#sec-starttags .名称的第一个字符必须是 NameStartChar , 不允许数字。

一个元素,例如 <2013-11-30>...</2013-11-30>无效。

一个元素,例如 <D2013-11-30>...</D2013-11-30>没问题。

如果您的程序更改为使用 ElementTree 而不是 lxml(from xml.etree import ElementTree as etree 而不是 from lxml import etree),则不会出现错误。但我认为这是一个错误。 lxml 做了正确的事情,ElementTree 没有。

关于python - 在 python 中使用 lxml 创建元素时出现 "Invalid tag name"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302560/

相关文章:

python - 是否有一个用于构建平均价格的 Python 函数,它以 2 个数组作为参数

python - 如果当前值大于现有最小值,则更新 mysql 中的表,否则忽略该更新

python matplotlib条形图添加条形标题

python - 为什么我会收到这个 NameError?我没有正确使用它吗?

python - 将变量内容转换为代码行

python - 删除具有特定字符串的行

javascript - 如何从字符串中解析 XML

javascript - IE 9::使用 Javascript 将 XML 代码显示到 Div 中

java - 带有 TabLayout 的 fragment 内的 ScrollView 不滚动,为什么?

python-2.7 - 在pygame中创建一个窗口而不显示它