2016-07-13 41 views

回答

2

lxml可用于解析xml并保留行号。这里有一个简单的例子:

from lxml import etree 

xml = ''' 
    <foo> 
     <bar baz="1">hello</bar> 
     <bar baz='2'>world</bar> 
    </foo> 
''' 

root = etree.fromstring(xml) 
for bar in root.findall("bar"): 
    baz = bar.attrib.get('baz', None) 
    if int(baz) > 1: 
     raise Exception("baz must not be greater than 1 on line %s" % bar.sourceline) 
2

我认为您真正需要做的是根据预期的XML模式验证XML文件。 lxmlcan do that for you。验证日志将包含您在XML文件中找到问题所需的所有信息。

+0

我没有试图根据预期的模式验证它。我正在使用我自己的逻辑验证XML中的属性是否具有预期的数字。下面是一个简单的例子:检查所有名为“foo”的元素,并确保foo中属性“bar”的值不超过100.如果bar> 100,我想知道该行发生的地方。 – Ben