'xml.etree.ElementTree.Element' object has no attribute 'start_line'
时间: 2023-08-07 14:02:02 浏览: 173
很抱歉,之前的代码中我又犯了错误。在 xml.etree.ElementTree 模块中,没有 `start_line` 和 `end_line` 这样的属性。
正确的方法是,遍历 XML 文件时,记录每个元素的起始行和结束行,并将其作为参数传递给检查函数。以下是修改后的代码:
```python
import xml.etree.ElementTree as ET
def check_xml(xml_file, start_line, end_line):
for elem in ET.parse(xml_file).getroot().iter():
if elem.tag == "comment":
if not elem.text.strip().startswith("<!--XX_HLR_NUM-->"):
print(f"Error: line {start_line} does not start with <!--XX_HLR_NUM-->")
elif not elem.text.strip().endswith("<!--END-->"):
print(f"Error: line {end_line} does not end with <!--END-->")
start_line, end_line = elem.sourceline, elem.sourceline + len(elem.text.split("\n")) - 1
with open("example.xml") as f:
check_xml(f, 1, sum(1 for line in f))
```
这个函数打开 XML 文件,遍历文件中的每一个元素,并记录每个元素的起始行和结束行。然后,将这些行号作为参数传递给检查函数。在检查函数中,我们可以使用 `elem.text` 属性获取注释文本,并使用字符串方法来检查注释文本的开头和结尾。
请注意,代码中的 `sum(1 for line in f)` 可以计算文件的总行数,因为在调用 `check_xml` 函数之前,文件指针已经指向了文件的末尾。
阅读全文