следующий код:Python ElementTree не любит двоеточие имя инструкции обработки
import xml.etree.ElementTree as ET
xml = '''\
<?xml version="1.0" encoding="UTF-8"?>
<testCaseConfig>
<?LazyComment Blah de blah/?>
<testCase runLimit="420" name="d1/n1"/>
<testCase runLimit="420" name="d1/n2"/>
</testCaseConfig>'''
root = ET.fromstring(xml)
xml2 = xml.replace('LazyComment ', 'LazyComment:')
print(xml2)
try:
root2 = ET.fromstring(xml2)
except ET.ParseError:
print("\nERROR in xml2!!!\n")
xml3 = xml2.replace('testCaseConfig', 'testCaseConfig xmlns:Blah="http://www.w3.org/TR/html4/"', 1)
print(xml3)
try:
root3 = ET.fromstring(xml3)
except ET.ParseError:
print("\nERROR in xml3!!!\n")
raise
дает этот выход:
<?xml version="1.0" encoding="UTF-8"?>
<testCaseConfig>
<?LazyComment:Blah de blah/?>
<testCase runLimit="420" name="d1/n1"/>
<testCase runLimit="420" name="d1/n2"/>
</testCaseConfig>
ERROR in xml2!!!
<?xml version="1.0" encoding="UTF-8"?>
<testCaseConfig xmlns:Blah="http://www.w3.org/TR/html4/">
<?LazyComment:Blah de blah/?>
<testCase runLimit="420" name="d1/n1"/>
<testCase runLimit="420" name="d1/n2"/>
</testCaseConfig>
ERROR in xml3!!!
Traceback (most recent call last):
File "C:\Users\Paddy3118\Google Drive\Code\elementtree_error.py", line 30, in <module>
root3 = ET.fromstring(xml3)
File "C:\Anaconda3\envs\Py3.5\lib\xml\etree\ElementTree.py", line 1333, in XML
parser.feed(text)
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 3, column 17
Я искал и нашел this Q, которая указала на другие ресурсы, которые я прочитал.
Кажется, что '?' делает его обработкой, чье имя тега может включать двоеточия. Без '?' то двоеточие в имени указывает пространство имен, и один из ответов указывает, что определение пространства имен должно заставить все работать.
Объединение '?' и ':', но вызывает проблемы с ElementTree.
Мне даны xml-файлы этого типа, которые используются другими инструментами, которые анализируют его в порядке и хотят сами обрабатывать файлы с помощью Python. Есть идеи?
Спасибо.
Ах! Спасибо, я пропустил заметку XPath при поиске w3C.Файлы редактируются вручную, но читаются некоторыми библиотеками синтаксического анализа XML C++, которые, похоже, принимают эту ошибку. Я уже добавил предварительный фильтр xml к моему скрипту, где я заменяю это событие пробелом, и все хорошо. Я просто хотел узнать, отклонил ли Elementtree действительный xml, что означало бы оповещение его сопровождающих. Еще раз спасибо. – Paddy3118