Печать строк после определения начального и конечного тегов XML, включая теги, через файл XML - PullRequest
0 голосов
/ 08 мая 2019

Я бы хотел проанализировать «псевдо» XML-файл, определить начальные и конечные «теги», распечатать теги + текст между ними и повторить его через весь XML-файл

Вот пример "псевдо" XML-файла:

<?xml version='1.0' standalone='yes'?>
<config lastObjectId='4414'>
    <Agent Host='us.com'
        User='PLCR1'
        lastModifiedDate='2014-08-01'>
    </Agent>
</config>
  1. Начальный тег для идентификации: "<Agent Host='us.com'"
  2. Конечный тег для идентификации - "</Agent>"

Я пробовал использовать различные регулярные выражения для соответствия всему блоку, однако они строго / фиксированы для количества строк, содержащихся в блоке XML, и пока недостаточно хороши.

Примечание: я говорю, что это псевдо XML, так как все <Agent Host='us.com' отформатированы таким образом, без " > "

Regex

(.*Agent.*)((.*\n){1,3})(.*Agent.*)

Затем я попытался использовать «re.match», но я не нашел способа объединить оператор if, чтобы встретить начальный и конечный тег.

По сути, я бы сказал, что моя проблема в операторе if и регулярном выражении.

import re
xmlfile = open("20190211", "r")
output = open("output1.txt", "w")
counter = 0
for line in xmlfile:
    if re.match(".*Agent.*us.*",line):
        print (line , file = output)
        counter += 1
print ("Count: %s"% (counter) ,file =output)
output.close()

Я ожидал бы сопоставить и напечатать на файле «блок» XML, идентифицируемый начальным и конечным тегом.

<Agent Host='us.com'
    User='PLCR1'
    lastModifiedDate='2014-08-01'>
</Agent>

А затем просмотрите оставшуюся часть файла и найдите другие.

1 Ответ

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

После нескольких дополнительных попыток я пришел с ответом на мой вопрос.Добавление второго цикла for будет искать и сопоставлять конечный тег и делать то же самое во всем входном XML-файле, если он совпадает с обоими тегами

start tag -->>>>   <Agent Host='us.com'
end tag   -->>>>   </Agent>
import re
xmlfile = open("20190211", "r")
output = open("output1.txt", "w")
counter = 0
for line in xmlfile:
    if re.match(".*Agent.*us.*",line):
        print (line , file = output)
        counter += 1

    for line in xmlfile:
        print (line ,file = output)
        if re.match(".*Agent>,line):
            break
print ("Count: %s"% (counter) ,file =output)
output.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...