如何让XML标签以数字开头?

时间:2015-07-06 18:34:22

标签: python xml parsing elementtree

我正在使用ElementTree API来读取和写入XML文档。当我尝试添加以数字开头的标记时,XML文件不再有效。使用import xml.etree.cElementTree as ET,我成功地能够创建XML文档,但是当我尝试再次读取XML文件时,我得到了一个ParseError。就我的目的而言,XML文档是否格式不正确并不重要。 我只需要能够用数字开始标记。知道如何做到这一点吗?

这就是我的尝试:

from lxml import etree
parser = etree.XMLParser(recover=True)
tree = ET.parse('xmldoc.xml')
root = tree.getroot()
xmlstring = ET.tostring(root)
etree.fromstring(xmlstring, parser=parser)

如果我使用它,我会收到此错误:

  

ValueError:无效的标签名称u'1.0'

尝试这样做之后:

            inputowner = raw_input("Enter owner for " + ls[i] + ": ")
            child = ET.SubElement(prev , ls[i], owner = inputowner)
            prev = child
            prevowner = inputowner

以下是我尝试放入XML文件的列表:

['components', 'rel', 'core.slpi', '1.0', 'blluuses', 'i2c', 'src', 'logs', 'I2cUlog.c']

列表中的每个项目都应该用作ElementTree标记。当我达到'1.0'时会出现问题。

如果无法回答第一个问题,您是否知道任何其他模块几乎可以做同样的事情,但允许我有一个以数字开头的标签? ElementTree太棒了,我只需要这一件事就可以了,然后我可以继续前进。

1 个答案:

答案 0 :(得分:4)

XML element names cannot begin with a number

STag       ::=      '<' Name (S Attribute)* S? '>'
Name       ::=      NameStartChar (NameChar)*
NameStartChar      ::=      ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

如果文件的标记以数字开头,则该文件不是XML文档。为了创建这样的文件, 不希望得到任何符合标准的XML库的支持 。为了创建一个带有以数字开头的标签的文件,您必须在文本级别进行操作,但是,实际上,您最好不要反对谷物 - 只需用字母开始标记即可您可以利用在well-formed XML上运行的工具。