Dividir um XML grande em perl com base em n ocorrências de uma determinada tag

0

Sou novo no Perl e gostaria de receber ajuda com uma pergunta específica. Eu estou olhando para dividir um arquivo XML grande (cerca de 300MB) em arquivos separados com base em 'n' ocorrências de uma determinada marca.

Meu XML de origem é:

    <?xml version="1.0" encoding="UTF-8"?>
    <paraid:ID>1234</pmluid:ID>
    <pmlcore:Observation>
    <childtag>Name1</childtag>
       <childtag2>Number1</childtag2>
    <childtag3>
    <childtag4></childtag4>
    </childtag3>
    </pmlcore:Observation>
    <pmlcore:Observation>
    <childtag>Name2</childtag>
        <childtag2>Number2</childtag2>
    <childtag3>
    <childtag4></childtag4>
    </childtag3>
    </pmlcore:Observation>
    <pmlcore:Observation>
    <childtag>Name3</childtag>
        <childtag2>Number3</childtag2>
    <childtag3>
    <childtag4></childtag4>
    </childtag3>
    </pmlcore:Observation>
    <pmlcore:Observation>
    <childtag>Name4</childtag>
        <childtag2>Number4</childtag2>
    <childtag3>
    <childtag4></childtag4>
    </childtag3>
    </pmlcore:Observation>

Se o meu arquivo de entrada é como acima, então eu gostaria de dividir isso em arquivos separados com base em cada 10 ocorrências da tag pmlcore: Observação . Para fins de teste, digamos com minha entrada xml como acima, eu gostaria de ver os arquivos divididos para cada 2 ocorrências da tag (com as duas primeiras linhas do arquivo de entrada - xml prolog e paraID: ID inserido em cada arquivo dividido).

Meu XML seria dividido em dois arquivos:

Name1.txt

    <?xml version="1.0" encoding="UTF-8"?>
    <paraid:ID>1234</pmluid:ID>
    <pmlcore:Observation>
      <childtag>Name1</childtag>
        <childtag2>Number1</childtag2>
      <childtag3>
        <childtag4></childtag4>
       </childtag3>
    </pmlcore:Observation>
    <pmlcore:Observation>
      <childtag>Name2</childtag>
        <childtag2>Number2</childtag2>
            <childtag3>
                <childtag4></childtag4>
            </childtag3>
    </pmlcore:Observation>

Name2.txt

    <?xml version="1.0" encoding="UTF-8"?>
    <paraid:ID>1234</pmluid:ID>
    <pmlcore:Observation>
     <childtag>Name3</childtag>
      <childtag2>Number3</childtag2>
    <childtag3>
      <childtag4></childtag4>
    </childtag3>
   </pmlcore:Observation>
    <pmlcore:Observation>
   <childtag>Name4</childtag>
      <childtag2>Number4</childtag2>
       <childtag3>
         <childtag4></childtag4>
       </childtag3>
   </pmlcore:Observation>

Eu consegui fazer isso via awk, mas a divisão de arquivos tem sido dolorosamente lenta (já que o XML original tem cerca de 300MB). Eu gostaria de saber se há uma maneira simples, mas eficaz, de realizar isso por meio de um script em Perl. Eu não tenho o módulo XML :: Twig instalado, então isso é descartado também. Já pesquisei por aí, mas nenhuma das questões parecia abordar uma divisão para cada n ocorrências de uma tag e sem XML :: twig. Por favor, ajude.

    
por Kaladin 18.01.2018 / 18:34

0 respostas

Tags