разбирать XML-файл и возвращать список определенных переменных - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь извлечь список X, Y, Z из XML-файла. Часть XML:

 <Data>
      <TargetPosition X="57.23471787820652" Y="-26.04271457691532" 
Z="9.988092935592704" Valid="1"/> #PosLang
      <StartPosition X="0" Y="0" Z="0" Valid="0"/>
    </Data>
  </Object>
  <Object Type="{aa99a9ec-4b85-442e-b914-de3579656eb5}">
    <ParentTObject Valid="1">
      <Translation X="0" Y="0" Z="0"/>
      <Rotation W="1" X="0" Y="0" Z="0"/>
    </ParentTObject>
    <Data>
      <TargetPosition X="58.81901290773406" Y="-20.09883392050945" 
Z="16.53197054898237" Valid="1"/> #NegLang
      <StartPosition X="0" Y="0" Z="0" Valid="0"/>
    </Data>
  </Object>

Мне нужно извлечь X, Y, Z из всех TargetPosition в файл с # PosLang комментарий

def targets(path='some.xml'):
    try:
        e = ET.parse(path).getroot()
    except FileNotFoundError:
        return list()

    Position = namedtuple('float', ['x', 'y', 'z'])

    for position in e.iter('TargetPosition'):
        yield Position(
            x=float(position.get('X')), 
            y=float(position.get('Y')),
            z=float(position.get('Z'))
        )

В коде y я извлекаю X, Y, Z из всех TargetPosition, но мне нужно только то, что имеет комментарий #PosLang

Ответы [ 2 ]

4 голосов
/ 24 апреля 2019

Если ваш XML на самом деле содержит строку #PosLang в точности так, как показывает ваш образец, то это не комментарий, а обычный текстовый узел.

И поскольку этот текстовый узелследует за элементом <TargetPosition>, он будет находиться в свойстве .tail:

def targets(path='some.xml'):
    try:
        e = ET.parse(path).getroot()
    except FileNotFoundError:
        return list()

    Position = namedtuple('float', ['x', 'y', 'z'])

    for position in e.iter('TargetPosition'):
        if "#PosLang" in position.tail:
            yield Position(
                x=float(position.get('X')), 
                y=float(position.get('Y')),
                z=float(position.get('Z'))
            )
0 голосов
/ 24 апреля 2019

Согласно документам , ElementTree игнорирует комментарии XML.Можете ли вы получить XML, сгенерированный по-другому?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...