【问题标题】:How to have an XML tag start with a number?如何让 XML 标签以数字开头?
【发布时间】:2015-09-24 00:43:27
【问题描述】:

我正在使用 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 太棒了,我只需要这件事来工作,然后我就可以继续前进。

【问题讨论】:

    标签: python xml parsing elementtree


    【解决方案1】:

    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 上运行的工具。

    另见

    【讨论】:

    • 对于我的任务,我无法真正修改列表中的元素。他们需要准确。不过,我整个早上都在做研究,也许你是对的,我应该尝试不同的方法。感谢您的回复。
    • 我绝对会改变方法。不客气。
    • “就我的目的而言,XML 文档的格式是否正确并不重要。”如果它的格式不正确,那么它就不是 XML。您可以使用任何您喜欢的旧数据格式,但请不要将其称为 XML 或在 XML 论坛上询问有关它的问题。当然,不要期望使用 XML 解析器来读取它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2012-04-01
    • 2017-12-04
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多