Python разбирает Xml с пространством имен - PullRequest
0 голосов
/ 23 мая 2019

Xml, который нужно разобрать "Cos1.XML"

<config xmlns="http://tail-f.com/ns/config/1.0">
  <sys xmlns="urn:XYZ:ns:yang:app:4.3.3.0">
  <app>
  <Feature>
    <name>0</name>
    <FeatureID>default</FeatureID>
    <param>MaxVoiceMessageLength</param>
    <value>120s</value>
  </Feature>
  <Feature>
    <name>96</name>
    <FeatureID>default</FeatureID>
    <param>MCNType</param>
    <value>CLIAggregation</value>
  </Feature>
  <Feature>
    <name>97</name>
    <FeatureID>default</FeatureID>
    <param>SM_HOUR_FORMAT</param>
    <value>24_HR</value>
  </Feature>
  <Feature>
    <name>99</name>
    <FeatureID>default</FeatureID>
    <param>MCNRecordsOrder</param>
    <value>LIFO</value>
  </Feature>
  </app>
  </sys>
</config>

Это скрипт Python, который я использую для анализа XMl, чтобы получить теги "param" и "value". Но findall возвращается пустым.

import xml.etree.ElementTree as ET
import sys
def modifycos():

    tree = ET.parse(cos1.xml)
    root = tree.getroot()
    for cos in root.findall('./config/sys/app/Feature')
        parameter = cos.find('param').text
        parmvalue = cos.get('value')
        print(parameter, parmvalue)

modifycos()

(MaxVoiceMessageLength, '120s') (MCNType, 'CLIAggregation') (SM_HOUR_FORMAT, '24_HR') (MCNRecordsOrder 'LIFO')

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Вот несколько вещей, которые вы можете сделать, чтобы убедиться, что вы нажимаете правильный файл-

Я не вижу названия файла .XML, упомянутого в следующей строке -

for cos in root.findall('./config/sys/app/Feature'):

Убедитесь, что имя вашего файла введено в этот код, например:

for cos in root.findall('./config/sys/app/Feature/cos1.XML'):

Если это все еще не работает, попробуйте определить правильный путь к файлу-

import os
current_path = os.path.dirname(os.path.realpath(__file__))
file_path = os.path.join(current_path+'/config/sys/app/Feature/cos1.XML')

Это должно работать. Дайте мне знать, если это поможет. :)

0 голосов
/ 23 мая 2019

Попробуйте это:

import xml.etree.ElementTree как ET import sys

def modifycos():

    tree = ET.parse("try.xml")

    root = tree.getroot()

    sys = root.getchildren()[0]
    app = sys.getchildren()[0]
    features = app.getchildren()
    for element in features:
        childs = element.getchildren()
        for child in childs:
            if "param" in child.tag:
                parameter = child.text

            if "value" in child.tag:
                paramvalue = child.text
        print(parameter , paramvalue)

Это даст вам желаемый результат.

...