Boa tarde,
Alguém sabe como faço para validar um arquivo xml contra um xsd usando StAX?
Segue código usado para ler os arquivos xml.
@Override
public void run() {
arquivos = diretorio.getAbsoluteFile().listFiles(new nfeInNameFilter());
for(int i = 0; i < arquivos.length; i++){
// pass the file name.. all relative entity
// references will be resolved against this as
// base URI.
try {
xmlr = xmlif.createXMLStreamReader(arquivos[i].getAbsolutePath(),new FileInputStream(arquivos[i].getAbsolutePath()));
// when XMLStreamReader is created, it is positioned
// at START_DOCUMENT event.
int eventType = xmlr.getEventType();
// check if there are more events in the input stream
printEventType(eventType);
while(xmlr.hasNext()) {
eventType = xmlr.next();
printEventType(eventType);
// these functions print the information about
// the particular event by calling the relevant
// function
}
} catch (XMLStreamException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
System.out.println("\nimprimindo --------------------------------------------------------");
for(regC170NFe c170: proc.getLinhasRegC170NFes()){
System.out.println(c170.getC100_f05_COD_MOD() +(char)9+c170.getC100_f07_SER()+(char)9+c170.getC100_f08_NUM_DOC()+(char)9+c170.getF02_NUM_ITEM());
}
}
private static void printEventType(int eventType) throws XMLStreamException {
// System.out.println("Event-Type: " + getEventTypeString(eventType));
getEventTypeString(eventType);
}
public static String getEventTypeString(int eventType) throws XMLStreamException {
switch (eventType) {
case XMLEvent.START_ELEMENT:
galhoAtual.append("/" + xmlr.getName().getLocalPart());
return "START_ELEMENT";
case XMLEvent.END_ELEMENT:
if(galhoAtual.lastIndexOf(xmlr.getLocalName()) >= 0){
galhoAtual.delete(galhoAtual.length() - xmlr.getLocalName().length() - 1,galhoAtual.length());
}else{
galhoAtual.delete(galhoAtual.lastIndexOf("/"), galhoAtual.length());
}
return "END_ELEMENT";
case XMLEvent.PROCESSING_INSTRUCTION:
System.out.println("PROCESSING_INSTRUCTION");
return "PROCESSING_INSTRUCTION";
case XMLEvent.CHARACTERS:
// System.out.println(galhoAtual.toString() +" "+ xmlr.getText());
return "CHARACTERS";
case XMLEvent.COMMENT:
System.out.println("COMMENT");
return "COMMENT";
case XMLEvent.START_DOCUMENT:
return "START_DOCUMENT";
case XMLEvent.END_DOCUMENT:
if(galhoAtual.length()>0){ galhoAtual.delete(0,galhoAtual.length() -1 );}
return "END_DOCUMENT";
case XMLEvent.ENTITY_REFERENCE:
System.out.println("ENTITY_REFERENCE");
return "ENTITY_REFERENCE";
case XMLEvent.ATTRIBUTE:
System.out.println("ATTRIBUTE");
// for(int i = 0; i< xmlr.getAttributeCount(); i++){
// System.out.println("Atributos: " + xmlr.getAttributeLocalName(i) +" "+ xmlr.getAttributeValue(i));
// }
return "ATTRIBUTE";
case XMLEvent.DTD:
System.out.println("DTD");
return "DTD";
case XMLEvent.CDATA:
System.out.println("CDATA");
return "CDATA";
case XMLEvent.SPACE:
System.out.println("SPACE");
return "SPACE";
}
return "UNKNOWN_EVENT_TYPE , " + eventType;
}