Commit 5f110e61 by Patryk Czarnik

Eksperymenty z walidacją

parent bcb1e17c
...@@ -33,3 +33,4 @@ build/ ...@@ -33,3 +33,4 @@ build/
### Mac OS ### ### Mac OS ###
.DS_Store .DS_Store
/wynik_walidacji.xml
package walidacja;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import java.io.FileOutputStream;
public class WalidujWaluty3 {
public static void main(String[] args) {
String plikXML = "waluty_2022.xml";
String plikWynikowy = "wynik_walidacji.xml";
String plikXSD = "waluty.xsd";
System.out.println("Początek programu");
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.parse(plikXML);
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new StreamSource(plikXSD));
Validator validator = schema.newValidator();
MojErrorHandler errorHandler = new MojErrorHandler();
validator.setErrorHandler(errorHandler);
// Można walidować dokument znajdujący się w pamięci.
// Wersja validate z dwoma parametrami pozwala zapisać wynik walidacji, czyli dokument z uzwględnionymi regułami zapisanymi w schemaie.
// Np. uzupełnienie domyślnych atrybutów.
System.out.println("Start walidacji");
DOMResult domResult = new DOMResult();
validator.validate(new DOMSource(doc), domResult);
Node resultDoc = domResult.getNode();
if(errorHandler.czyBylBlad()) {
System.out.println("Koniec walidacji. Dokument zawierał błędy");
} else {
System.out.println("Koniec walidacji. Dokument prawidłowy");
}
/* Zapisujemy zmieniony uzywajac Load and Save: */
DOMImplementationLS lsImpl = (DOMImplementationLS)builder.getDOMImplementation().getFeature(
"LS", "3.0");
if(lsImpl == null) {
System.err.println("Nie udalo sie uzyskac obiektu DOMImplementationLS");
return;
}
LSSerializer ser = lsImpl.createLSSerializer();
LSOutput out = lsImpl.createLSOutput();
/* ustawiamy plik */
out.setByteStream(new FileOutputStream(plikWynikowy));
System.out.println("Poczatek zapisywania.");
ser.write(resultDoc, out);
System.out.println("Koniec.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
<xs:sequence> <xs:sequence>
<xs:element name="ExchangeRatesTable" type="Tabela" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="ExchangeRatesTable" type="Tabela" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence> </xs:sequence>
<xs:anyAttribute namespace="http://www.w3.org/2001/XMLSchema-instance"/>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ArrayOfExchangeRatesTable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="waluty.xsd"> <ArrayOfExchangeRatesTable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="waluty.xsd">
<ExchangeRatesTable> <ExchangeRatesTable>
<Table>A</Table> <Table>A</Table>
<No>001/A/NBP/2022</No> <No>001/A/NBP/2022</No>
...@@ -10,7 +11,7 @@ ...@@ -10,7 +11,7 @@
<Code> <Code>
THB THB
</Code> </Code>
<Mid>0.1219</Mid> <Midd>0.1219</Midd>
</Rate> </Rate>
<Rate> <Rate>
<Currency>dolar amerykański</Currency> <Currency>dolar amerykański</Currency>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment