Validando schema XML

12 respostas
J

oi pessoal,

estou fazendo uma aplicação de NFs-e e estou tendo o seguinte problema:

Cannot find the declaration of element 'EnviarLoteRpsEnvio'

Sendo meu xml possui essa tag, segue:

<EnviarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><LoteRps Id="lote001" versao="2.01">...aqui vai um XML gigante </EnviarLoteRpsEnvio>

na hora de validar no schema, ele não acha a tag…alguem sabe porque?

12 Respostas

M

Como EnviarLoteRpsEnvio está declarado no seu schema?

J

Como assim? se.for quanto.a.ortografia…esta desse jeito que postei

M

Como você faz a validação? Usa um arquivo XSD ou algo do tipo?

J

Ah sim. inclusive gerei o xml apartir do xsd

M

Pois é, e como está declarado a tag EnviarLoteRpsEnvio no seu XSD? Esse erro está ocorrendo provalvemente porque tem alguma coisa declarada de forma errada e faz com que a TAG não seja reconhecida. Poderia postar a parte do seu XSD que contém essa tag?

J

Posso sim…mas me.diz.como isso eh possivel.sendo que gerei o xml pelo.xsd, usando o eclipse?

M

Você não mudou nada no XML? Como então você está fazendo a validação? Realmente isso está estranho.

J

Perai…vou postar os dois…mas.nao.mudei nada…sohadicionei as informacoes.

J

O xsd eh esse
http://www.igenio.com.br/abrasf/arquivos/files/GT%202%20-%20DES-IF/NFSe/NFSe%202.01/schema_xml_nfse_v2-01.zip

J
Minha validação:
import java.io.IOException;

// SAX
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.XMLReader;

//SAX and external XSD
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.SchemaFactory;

import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.InputSource;

public class XMLUtils {

  private XMLUtils() {}
  
  // validate SAX and external XSD 
  public static boolean validateWithExtXSDUsingSAX(String xml, String xsd) 
  throws ParserConfigurationException, IOException 
  {
    try {
      SAXParserFactory factory = SAXParserFactory.newInstance();
      factory.setValidating(false); 
      factory.setNamespaceAware(true);

      SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
      SAXParser parser = null;
      try {
         factory.setSchema(schemaFactory.newSchema(new Source[] {new StreamSource( xsd )}));
         parser = factory.newSAXParser();
      }
      catch (SAXException se) {
        System.out.println("SCHEMA : " + se.getMessage());  // problem in the XSD itself
        return false;
      }
      
      XMLReader reader = parser.getXMLReader();
      reader.setErrorHandler(
          new ErrorHandler() {
            public void warning(SAXParseException e) throws SAXException {
              System.out.println("WARNING: " + e.getMessage()); // do nothing
            }

            public void error(SAXParseException e) throws SAXException {
              System.out.println("ERROR : " + e.getMessage());
              throw e;
            }

            public void fatalError(SAXParseException e) throws SAXException {
              System.out.println("FATAL : " + e.getMessage());
              throw e;
            }
          }
          );
      reader.parse(new InputSource(xml));
      return true;
    }    
    catch (ParserConfigurationException pce) {
      throw pce;
    } 
    catch (IOException io) {
      throw io;
    }
    catch (SAXException se){
      return false;
  }

  }
}
Trecho XSD
<xsd:element name="EnviarLoteRpsEnvio">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="LoteRps" type="tcLoteRps" />
				<xsd:element ref="dsig:Signature" minOccurs="0"
					maxOccurs="1" />
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="EnviarLoteRpsResposta">
		<xsd:complexType>
			<xsd:choice>
				<xsd:sequence>
					<xsd:element name="NumeroLote" type="tsNumeroLote"
						minOccurs="1" maxOccurs="1" />
					<xsd:element name="DataRecebimento" type="xsd:dateTime"
						minOccurs="1" maxOccurs="1" />
					<xsd:element name="Protocolo" type="tsNumeroProtocolo"
						minOccurs="1" maxOccurs="1" />
				</xsd:sequence>
				<xsd:element ref="ListaMensagemRetorno" minOccurs="1"
					maxOccurs="1" />
			</xsd:choice>
		</xsd:complexType>
	</xsd:element>
M

Rapaz, olhei o XSD que você passou e aparentemente está tudo em ordem. Faça o seguinte. Gere um XML menor e depois vá gerando XMLs maiores, até descobrir onde está o erro. Acontece que pode ter alguma tag bem interna do XML que você gerou que não está com o valor correto ou algo do tipo.

J

já fiz isso, mesmo só com a tag principal e mais uma…ele não reconhece.
O problema é que ele não reconhece a tag principal, então independente do que tenha dentro…não valida

Criado 7 de janeiro de 2013
Ultima resposta 8 de jan. de 2013
Respostas 12
Participantes 2