Помогите, у меня есть следующий файл XML, из которого я пытаюсь прочитать и извлечь данные, ниже приведена выдержка из файла xml,
<Variable name="Inboard_ED_mm" state="Output" type="double[]">17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154<Properties><Property name="index">25</Property><Property name="description"></Property><Property name="upperBound">0</Property><Property name="hasUpperBound">false</Property><Property name="lowerBound">0</Property><Property name="hasLowerBound">false</Property><Property name="units"></Property><Property name="enumeratedValues"></Property><Property name="enumeratedAliases"></Property><Property name="validity">true</Property><Property name="autoSize">true</Property><Property name="userSlices"></Property></Properties></Variable>
Я пытаюсь извлечь следующее: 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154
Я рассмотрел пример здесь, xml.etree.ElementTree — ElementTree XML API, и я могу заставить этот пример работать, но когда я изменяю код для приведенного выше XML, код ничего не возвращает!
Вот мой код,
import xml.etree.ElementTree as ET
work_dir = r"C:\Temp\APROCONE\Python"
with open(model.xml, 'rt') as f:
tree = ET.parse(f)
root = tree.getroot()
for Variable in root.findall('Variable'):
type = Variable.find('type').text
name = Variable.get('name')
print(name, type)
Любые идеи? Заранее благодарю за любую помощь.
Редактировать: Спасибо всем, кто прокомментировал. С вашим советом я поиграл и поискал и получил следующий код,
with open(os.path.join(work_dir, "output.txt"), "w") as f:
for child1Tag in root.getchildren():
for child2Tag in child1Tag.getchildren():
for child3Tag in child2Tag.getchildren():
for child4Tag in child3Tag.getchildren():
for child5Tag in child4Tag.getchildren():
name = child5Tag.get('name')
if name == "Inboard_ED_mm":
print(child5Tag.attrib, file=f)
print(name, file=f)
print(child5Tag.text, file=f)
Чтобы вернуть следующее,
{'name': 'Inboard_ED_mm', 'state': 'Output', 'type': 'double[]'}
Inboard_ED_mm
17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154, 17.154
Я знаю, что это не лучший код в мире, любые идеи о том, как упростить код, будут очень приветствоваться.
Variable
находится в пространстве имен по умолчанию. У вас естьxmlns="???"
где-нибудь в XML, который не показан? - person Daniel Haley   schedule 18.10.2018