【问题标题】:xml parsing error with cElementTree in pythonpython中cElementTree的xml解析错误
【发布时间】:2015-01-23 22:17:10
【问题描述】:

我一直在用 cElementTree 编写 XML 文件,当我使用 .parse(file) 时,我收到一条错误消息:

xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 15

XML 文件:

<material Date Created="1/23/2015 at 14:59:10 in Mountain Standard Time" Material Name="Material" Render Engine="CYCLES">
    <main>
        <node0 inputs="" label="" location="<Vector (-114.1876, 479.6438)>" name="Texture Coordinate" node_specific="['from_dupli', False]" outputs="" type="TEX_COORD" />
        <node0 inputs="" label="" location="<Vector (87.1538, 383.3991)>" name="Attribute" node_specific="['attribute_name', '']" outputs="" type="ATTRIBUTE" />
        <node0 inputs="" label="" location="<Vector (-38.2097, 246.6303)>" name="RGB" node_specific="" outputs="[0, (0.5, 0.5, 0.5, 1.0)]" type="RGB" />
    </main>
</material>

我不明白为什么它不能解析它创建的文件。

【问题讨论】:

    标签: python xml parsing xml-parsing


    【解决方案1】:

    您正在尝试解析不是有效 XML 的文档。属性名称中不能有空格,解析器需要 = 而不是更多属性名称:

    <material Date Created="1/23/2015 at 14:59:10 in Mountain Standard Time"
    <!--          ^ position 15 on line 1 -->
    

    location 属性值中的&amp;lt;&amp;gt; 字符也应分别转义为&amp;lt;&amp;gt;

    如果您替换了material 标记上的属性名称中的空格并转义了那些尖括号,则可以解析文档:

    >>> from xml.etree import ElementTree
    >>> sample = '''\
    ... <material Date_Created="1/23/2015 at 14:59:10 in Mountain Standard Time" Material_Name="Material" Render_Engine="CYCLES">
    ...     <main>
    ...         <node0 inputs="" label="" location="&lt;Vector (-114.1876, 479.6438)&gt;" name="Texture Coordinate" node_specific="['from_dupli', False]" outputs="" type="TEX_COORD" />
    ...         <node0 inputs="" label="" location="&lt;Vector (87.1538, 383.3991)&gt;" name="Attribute" node_specific="['attribute_name', '']" outputs="" type="ATTRIBUTE" />
    ...         <node0 inputs="" label="" location="&lt;Vector (-38.2097, 246.6303)&gt;" name="RGB" node_specific="" outputs="[0, (0.5, 0.5, 0.5, 1.0)]" type="RGB" />
    ...     </main>
    ... </material>
    ... '''
    >>> tree = ElementTree.fromstring(sample)
    >>> tree
    <Element 'material' at 0x1042d42d0>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      相关资源
      最近更新 更多