2016-12-12 5 views
1

source.xmlкак извлечь раздел к нескольким XML из одного XML с помощью питона

<root xxx> 
    <test> 
     <ppp> 
      <ppp> 
       xxx 
      </ppp> 
      <ppp> 
       yyy 
      </ppp> 
      ... 
      ... 
     </ppp> 
    </test> 

Есть много среди ррр Я хочу, чтобы извлечь его отдельные файлы:

1.xml:

<ppp> 
     xxx 
    </ppp> 

2.xml

<ppp> 
     yyy 
    </ppp> 

3.xml и т. Д.

Я знаю, что это может быть достигнуто с помощью xml.etree.ElementTree PLS любезно предоставит мне пример для этого, запутанная часть - это двойной ppp.

ответ

1

Решение с использованием xml.etree.ElementTree модуля:

import xml.etree.ElementTree as ET 

# to load xml contents from file use the following: 
# tree = ET.parse('source.xml') 
# root = tree.getroot() 


source = '''<?xml version="1.0"?> 
<root> 
    <test> 
     <ppp> 
      <ppp> 
       xxx 
      </ppp> 
      <ppp> 
       yyy 
      </ppp> 
     </ppp> 
    </test> 
</root> 
''' 

root = ET.fromstring(source) 
for k, ppp in enumerate(root.findall('./test/ppp/ppp')): 
    tree = ET.ElementTree(ppp) 
    tree.write(str(k+1) + '.xml') 
  • root.findall('./test/ppp/ppp') - находит все совпадающие элементы по пути

  • tree.write() - пишет дерево элемент в файл, как XML

abov е код будет разбирать необходимые элементы и записать их в файлы 1.xml и 2.xml соответственно

https://docs.python.org/3/library/xml.etree.elementtree.html

+0

это работает в python2.7.11, и я хочу использовать tree.find() после того, как дерево = ET.ElementTree (ррр) – Robbie

+0

решение охватывает ваши первоначальные требования и должно работать на python 2.7 – RomanPerekhrest

1

В Документах (https://docs.python.org/2/library/xml.etree.elementtree.html) я нашел следующее предложение:

Детей вложенные, и мы можем получить доступ к определенным дочерним узлам по индексу:

>

корень [0] [1] .text '2008'

Таким образом, вы должны просто называть их индексом после получения их из своего первого большого xml. Надеюсь, что это как-то полезно :)

 Смежные вопросы

  • Нет связанных вопросов^_^