- Tutorialspoint
- XML Schema Definition (xsd)
- Netbeans
- Schema Editor plugin
- XPath plugin
- start from Window>XPath
- Notepad++ XML tools plugin
- validation
- XSL
- XPath
- More XML tools
- JAXP project
- JAXP 1.3 (Java 5) validator package javadoc
21 November 2018
Java & XML resources (updated)
31 August 2018
JAXB custom conversion using @XmlJavaTypeAdapter
To provide your own conversion implementation of a JAXB property, annotate the property in your JAXB class with javax.xml.bind.annotation.adapters.@XmlJavaTypeAdapter:
@XmlJavaTypeAdapter(MyAdapter.class)
public
void setFrom(LocalDate
from)
{
this.from = from;
}
Then write your Adapter marshalling your LocalDate attribute to an XML value String and unmarshalling it:
public
class MyDateAdapter
extends XmlAdapter<String,
LocalDate>
{
public
LocalDate
unmarshal(String
myString)
throws Exception
{
return LocalDate.parse(myString);
}
public
String marshal(LocalDate
myDate)
throws Exception
{
return myDate.toString();
}
}
2 December 2014
New DOM modules by Level (updated)
The W3C DOM specification is partitioned in a set of modules
Release versions of the DOM specification by W3C are called levels.
The table below shows which new modules appeared in each Level. Each higher level contains all modules of previous levels.
Note: DOM Level 2 also introduces namespaces.
| Level 1 | Level 2 | Level 3 |
| Core | XML | Xpath |
| HTML | Views | Validation |
| Range | Load and Save | |
| Traversal | Asynchronous Load | |
| Stylesheets | Mutation Name Events | |
| CSS | UI Events | |
| CSS2 | Text Events | |
| Events | Keyboard Events | |
| User Interface Events | ||
| Mouse Events | ||
| Mutation Events | ||
| HTML Events |
Modules can be optional and can have different W3C recommendation statusses. You can check if your implementation supports a module using
DOMImplementation.hasFeature(module, level) or
Node.isSupported(feature, version)
. Append ".0" to the level number (e.g. "3.0" for Level 3). Use null or empty string if any level will do.
1 December 2014
Setting the JAXP validation file (updated)
A JAXP parser
- If you are using SAX and obtained this parser from the SAXParserFactory:
javax.xml .parsers.SAXParser parser
- To
validate d using a schema (xsd) add this line of code to your parser setup:
parser.setProperty("http://java.sun.com/xml /jaxp/properties/schemaLanguage",
XML Constants.W3C_XML _SCHEMA_NS_URI);
parser.setProperty("http://java.sun.com/xml /jaxp/properties/schemaS ource",
new File("checkers.xsd"));
SL-385.B: add to code 3-2 after line 17
- The source can be a File, InputStream, InputSource or an Object array containing these types
- If you are using DOM, and you created this DocumentBuilderFactory instance :
javax.xml .parsers.DocumentBuilderFactory builder
- To
validate d using a schema (xsd) add this line of code to your parser setup:
builder.setAttribute("http://java.sun.com/xml /jaxp/properties/schemaLanguage",
XML Constants.W3C_XML _SCHEMA_NS_URI);
XML Constants.W3C_XML _SCHEMA_NS_URI =http://www.w3.org/2001/XML Schema
The corresponding constant for DTD (the default) in these cases is
=XML Constants.XML _DTD_NS_URIhttp://www.w3.org/TR/REC-xml
builder.setAttribute("http://java.sun.com/xml /jaxp/properties/schemaS ource",
new File("checkers.xsd"));
22 November 2014
JAXP history (updated)
| What’s new | ||
| DOM level 0: | ||
1.0
| DOM level 1 (tree), SAX 1.0 (push) org.xml.sax.Parser | |
1.4
|
1.1
| DOM Level 2, SAX 2.0 (+validation), TrAX (XSLT) Apache Crimson XMLReader |
1.2
| XML Schema Apache Xerces2 XMLReader | |
5
|
1.3
| DOM level 3, XML 1.1, XInclude 1.0, Xpath 1, Validator API |
6
|
1.4
| StAX (pull) SE also bundles JAXB |
7u40
| 1.5 | |
8
| 1.6 | |
9
| - | no separate |
More details on DOM levels.
29 January 2014
XML versus JSON
- Advantages of XML: document markup
- XML schema
- namespaces
- strong widespread validation
- data type reuse
- references
- mixed content, CDATA
- comments
- XPath querying
- Advantages of JSON: data interchange
- concise format
- JavaScript subset, builtin parser
- arrays
10 October 2010
DOM XML Load validation
The example below adds DOM schema validation when you are parsing the XML input file to the DOM load/save example.
The example also features a DOM Level 3 DOMErrorHandler.
Also compare with the editing validation example.
// SimpleDOML3XSD.java
import org.w3c.dom.*;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.w3c.dom.ls.*;
import javax.xml.XMLConstants;
import java.io.OutputStreamWriter;
public class SimpleDOML3LSXSD {
public static void main(String args[]) {
Document doc;
try {
// Create DOM Document using DOM Level 3 Load
DOMImplementationLS ls = (DOMImplementationLS) DOMImplementationRegistry.
newInstance().getDOMImplementation("LS");
LSParser builder = ls.createLSParser(
DOMImplementationLS.MODE_SYNCHRONOUS,
// for DTD use XMLConstants.XML_DTD_NS_URI
XMLConstants.W3C_XML_SCHEMA_NS_URI);
DOMConfiguration config = builder.getDomConfig();
config.setParameter("validate", true);
config.setParameter("error-handler", new StdErrorHandler());
doc = builder.parseURI(args[0]);
// Obtain root elements
Element root = doc.getDocumentElement();
// Add comment texts
Comment comment = doc.createComment("Training text");
root.appendChild(comment);
// Output to standard output; using DOM Level 3 save
LSOutput target = ls.createLSOutput();
target.setCharacterStream(new OutputStreamWriter(System.out));
ls.createLSSerializer().write(doc, target);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
System.exit(0);
}
}
private static class StdErrorHandler implements DOMErrorHandler {
public boolean handleError(DOMError e) {
String prefix = "Severity ";
if (e.getLocation().getLineNumber() != -1) {
prefix = "Line " + e.getLocation().getLineNumber()
+ " column " + e.getLocation().getColumnNumber()
+ ", severity ";
}
System.err.println(
prefix + e.getSeverity()
+ " issue: " + e.getMessage());
return true;
}
}
}
9 October 2010
Load and Save XML with DOM (Level 3)
Prior to DOM Level 3, DOM did not standardize reading and writing XML.
Below is the SL-385 code 4-2 modified to use the standard DOM level 3 Load and Save (LS) API.
An alternative JAXP (but not DOM standard) way is to read using the JAXP DocumentBuilder and to write using the JAXP transformer (TrAX XSLT).
(I included a comment showing DOM LS writing starting from a DocumentBuilder obrained from JAXP reading as well.)
// SimpleDOML3LS.java
import org.w3c.dom.*;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.w3c.dom.ls.*;
import java.io.OutputStreamWriter;
public class SimpleDOML3LS {
public static void main(String args[]) {
Document doc;
try {
// Create DOM Document using DOM Level 3 Load
DOMImplementationLS ls = (DOMImplementationLS) DOMImplementationRegistry.
newInstance().getDOMImplementation("LS");
LSParser builder = ls.createLSParser(
DOMImplementationLS.MODE_SYNCHRONOUS,
null);
doc = builder.parseURI(args[0]);
// Obtain root elements
Element root = doc.getDocumentElement();
// Add comment texts
Comment comment = doc.createComment("Training text");
root.appendChild(comment);
// Output to standard output; using DOM Level 3 save
// If you parsed using a JAXP DocumentBuilder
// you can also get your LSimplementation from your Document:
// DOMImplementationLS ls = (DOMImplementationLS) doc.
// getImplementation().getFeature("LS","3.0");
LSOutput target = ls.createLSOutput();
target.setCharacterStream(new OutputStreamWriter(System.out));
ls.createLSSerializer().write(doc, target);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
System.exit(0);
}
}
}
To add newlines/indents to enhance readability of the output, replace in the above examplels.createLSSerializer().write(doc, target);with
LSSerializer serializer = ls.createLSSerializer();
DOMConfiguration serializerConfig = serializer.getDomConfig();
serializerConfig.setParameter("format-pretty-print", Boolean.TRUE);
serializer.write(doc, target);