Recuperar texto entre duas strings (tags)

5 respostas
D

Olá, estou tentando capturar um texto que está entre duas strings, as quais são tags XML, data este texto abaixo, quero somente o que está dentro das tags e

<v1:specialMeasuresFrom/>
         <v1:specialMeasuresTo/>
         <product>
            <v1:internalCode>454455</v1:internalCode>
            <v1:subInternalCode>454455</v1:subInternalCode>
            <v1:barCode>7891141018572</v1:barCode>
            <v1:ncm>33051000</v1:ncm>
            <v1:icms>
               <m:cst>00</m:cst>
               <m:taxRate>17.00</m:taxRate>
               <m:commencementDate>2002-12-01-02:00</m:commencementDate>
               <m:expiryDate>2999-12-31-02:00</m:expiryDate>
               <m:legalProvision>Art. 63, I e §1º do RICMS/ES . Art. 71, I, "a" do RICMS/ES</m:legalProvision>
               <m:observations>Inexistente</m:observations>
               <m:additionalInformation>Inexistente</m:additionalInformation>
            </v1:icms>
         </product>
      </v1:fiscalScenarioSummary>

estou tentado fazer assim, e já tentei algumas pequenas variações neste código com base em pesquisas na internet, mas nada funcionou, acredito que talvez tenha que usar algun escape em algum caractere especial, como / ou <, já tentei também, alguém tem alguma sugestão?

Pattern p2 = Pattern.compile("<product>(.*?)</product>");
            Matcher m2 = p2.matcher(xmlSemNamespaces);

            while (m2.find()) {
                System.out.println(m2.group());
            }

5 Respostas

T

tenta assim:

Pattern p2 = Pattern.compile("<product[^>]*>(.*?)</product>");  
Matcher m2 = p2.matcher(xml);  
while (m2.find()) {  
   System.out.println(m2.group(1));  
}
D

não funcionou!! modifiquei assim, ele retorna a tag do produto, mas nada mais

Pattern p2 = Pattern.compile("<product[^>]*>(.*?)");

retorno

<product>
F

Já fiz algo parecido e usei a mesma expressão regular que vc usou (.*?), e funcionou,nao sei o porque nao vai.

Tente fazer assim:

Pattern p2 = Pattern.compile("<v1:specialMeasuresTo/><product>(.*?)</product>");

Ou coloca um \n entre o v1:specialMeasuresTo/ e o caso ele precise pular uma linha.

D

Suspeito que o problema são as novas linhas \n, teria como negar elas na expressão regex.

Pattern p2 = Pattern.compile("<product[^>]*>(.*?)</product>");
            Matcher m2 = p2.matcher("abc <product> assim funciona </product> asdf");


            Pattern p2 = Pattern.compile("<product[^>]*>(.*?)</product>");
            Matcher m2 = p2.matcher("abc <product> assim não \n funciona </product> asdf");

teria que ser algo do tipo, para negar as novas linhas?

Pattern p2 = Pattern.compile("<product[^>]*>(.[^\n]*?)</product>");
            Matcher m2 = p2.matcher("abc <product> assim funciona </product> asdf");
R

Já tentou compilar o Pattern com multiline?Pattern p = Pattern.compile(minhaRegex, Pattern.MULTILINE);

Criado 17 de abril de 2013
Ultima resposta 18 de abr. de 2013
Respostas 5
Participantes 4