作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 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: Invalid tag name 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 太棒了,我只需要这一件事就可以工作,然后我就可以继续前进了。
最佳答案
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 上运行的工具.
关于python - 如何让 XML 标签以数字开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31253137/
我是一名优秀的程序员,十分优秀!