【问题标题】:Error: lxml.etree.XMLSyntaxError: expected '>'错误:lxml.etree.XMLSyntaxError:预期的“>”
【发布时间】:2016-04-16 18:46:28
【问题描述】:

我在一个字符串中有这个 XML 数据:

<?xml version="1.0" encoding="UTF-8"?>
<class name="C" kind ="concrete">
    <inheritance>
        <from name="A" privacy="public" />
        <from name="B" privacy="public" />
    </inheritance>
    <private>
        <methods>
            <method name="C" type="C" scope="instance">
                <arguments></arguments>
        </methods>
    </private>
</class>

我想使用 xpath 查找一些元素。这是我的代码:

utf8_parser = etree.XMLParser(encoding='utf-8')
root = etree.fromstring(string.encode('utf-8'), parser=utf8_parser)
somelist = root.findall(xpathString)

我收到了这个错误:

root = etree.fromstring(stringOutput.string.encode('utf-8'), parser=utf8_parser)
  File "lxml.etree.pyx", line 3032, in lxml.etree.fromstring (src/lxml/lxml.etree.c:68106)
  File "parser.pxi", line 1785, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:102455)
  File "parser.pxi", line 1673, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:101284)
  File "parser.pxi", line 1074, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:96466)
  File "parser.pxi", line 582, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:91275)
  File "parser.pxi", line 683, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:92461)
  File "parser.pxi", line 622, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:91757)
lxml.etree.XMLSyntaxError: expected '>', line 11, column 11

我认为问题可能在于字符串中的双引号。是否可以?使用 xpath 查找元素的正确代码应该是什么样的?

【问题讨论】:

  • 你的方法元素没有关闭。
  • 我不是刚刚say that吗? :-)

标签: python xml xpath lxml


【解决方案1】:

双引号分隔属性值是完全可以的,但缺少结束标记的method 元素不是。这是您的 XML 已修复为格式正确:

<?xml version="1.0" encoding="UTF-8"?>
<class name="C" kind ="concrete">
    <inheritance>
        <from name="A" privacy="public" />
        <from name="B" privacy="public" />
    </inheritance>
    <private>
        <methods>
            <method name="C" type="C" scope="instance">
                <arguments></arguments>
            </method>
        </methods>
    </private>
</class>

【讨论】:

  • 谢谢,但出现另一个错误。 lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: methods line 4 and private, line 12, column 19。我是否正确使用了 lxml 函数?
  • 该错误表明问题出在您的 XML 中,但我仔细检查了答案中的 XML 格式是否正确。我建议您仔细检查您是否完全按照提供的方式使用它。复制粘贴比手动重新创建更安全。如果这不起作用,请创建一个 minimal reproducible example 来演示问题。
  • 我复制了你修复的 xml 并使用了它,所以问题不应该出现在 xml 文件中,这就是我得到的:File "/usr/lib/python3/dist-packages/lxml/_elementpath.py", line 214, in prepare_predicate raise SyntaxError("invalid predicate") SyntaxError: invalid predicate
  • 这是我在 xpath 字符串中的内容:model/class[*/attributes/attribute/@name='var']/@name
  • 现在这是一个新错误。你知道这是怎么回事吗?您确实必须发布 minimal reproducible example (此时最好在新问题中)以避免这种打地鼠模式。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-05-14
  • 2013-07-16
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 2019-12-07
  • 2012-12-23
相关资源
最近更新 更多