transformação de texto XML

0

Eu tenho uma grande parte do arquivo que é como abaixo:

<DataGroup xsi:type="ReportDataGroup">
<SmartReportTemplate DescriptionContentType="text/plain"
IsActive="true">
<Name ns1:translate="yes">Agent Summary</Name>
<Defaults type="defaults">
<Title ns1:translate="yes">Agent Summary Report</Title>
<Description ns1:translate="yes"></Description>

Agora preciso verificar os padrões .*ns1:translate="yes">(.*)</.* e quando encontrado eu preciso adicionar string da matriz abaixo desta linha. Junto com a string da matriz, eu preciso adicionar as tags <Name xml:lang="ja"> e </Name> ao redor da string obtendo da matriz se a a linha acima tem </Name> e precisa adicionar <Title xml:lang="ja"> e </Title> tags se a linha correspondente ao padrão tiver </Title>

O resultado final deve ser semelhante:

<DataGroup xsi:type="ReportDataGroup">
<SmartReportTemplate DescriptionContentType="text/plain"
IsActive="true">
<Name ns1:translate="yes">EM - perc</Name>
<Name xml:lang="ja">\u886815wEM - perce ~~~~~~~~~ ~~~~~~~~~ ~~\u5834</Name>
<Defaults type="defaults">
<Title ns1:translate="yes">AG - Rep</Title>
<Title xml:lang="ja">\u886815wAG - Rep ~~~~~~~~~ ~~~~~~~~~ ~~\u5834</Title>
<Description ns1:translate="yes"></Description>

onde as strings " \u886815wEM - perce ~~~~~~~~~ ~~~~~~~~~ ~~\u5834 " etc ... estão em uma matriz.

Alguma ideia de como fazer isso? Eu tentei com sed dentro de um loop while que lê arquivo linha por linha, mas leva muito tempo. Eu tentei com o awk, mas não consigo acessar o array de caracteres especiais dentro do awk.

    
por sameera 15.06.2012 / 10:50

1 resposta

0

Se uma solução parcial em vim for aceitável:

:%s/\(.*\(Name\|Title\).*ns1:translate="yes">.*<\/.*\)/< xml:lang="ja">\u886815wEM - perce \~\~\~\~\~\~\~\~\~ \~\~\~\~\~\~\~\~\~ \~\~\u5834<\/>\r/g

escapando de \ por \/ e ~ por \~ .

\(Name\|Title\) permite corresponder dois padrões e recuperá-los com aqui.

    
por 17.03.2016 / 16:35

Tags