This
program and SimpleSVG.java and DOMReader.java are available in $cs639/dom
Note:
it’s not usual to use a prefix with SVG XML because then you can’t
validate using SVG’s standard DTD (you would need to add
prefixes to it too)
//
Example 10.5, simplified to not produce a DOCTYPE
//
This version uses namespace prefixes. See
SimpleSVG.java
//
for case using a default namespace
//
Output, with added newlines:
// <?xml
version="1.0" encoding="UTF-8"
standalone="no"?>
// <!--An example
from Chapter 10 of Processing XML with Java-->
// <?xml-stylesheet type="text/css"
href="standard.css"?>
// <s:svg xmlns:s="http://www.w3.org/2000/svg">
// <s:desc>An
example from Processing XML with Java</s:desc></s:svg>
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.dom.DOMSource;
import org.w3c.dom.*;
import java.io.IOException;
public class SimpleSVG1 {
public static void
main(String[] args) {
try {
// Find the implementation
DocumentBuilderFactory
factory
= DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder
builder = factory.newDocumentBuilder();
DOMImplementation
impl = builder.getDOMImplementation();
// Create the
document type node (not required)
//
DocumentType svgDOCTYPE
= impl.createDocumentType(
// "svg",
"-//W3C//DTD SVG 1.0//EN",
//
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
// );
Document doc = impl.createDocument(
"http://www.w3.org/2000/svg", "s:svg",
null); //added s:
// Fill the document
Node rootElement
= doc.getDocumentElement();
ProcessingInstruction
xmlstylesheet
= doc.createProcessingInstruction("xml-stylesheet",
"type=\"text/css\" href=\"standard.css\"");
Comment comment
= doc.createComment(
"An example from Chapter 10 of
Processing XML with Java");
doc.insertBefore(comment, rootElement);
doc.insertBefore(xmlstylesheet, rootElement);
Node desc = doc.createElementNS(
"http://www.w3.org/2000/svg",
"s:desc");
//added s:
rootElement.appendChild(desc);
Text descText =
doc.createTextNode(
"An example from Processing XML
with Java");
desc.appendChild(descText);
// Serialize the
document onto System.out
TransformerFactory
xformFactory
= TransformerFactory.newInstance();
Transformer idTransform
= xformFactory.newTransformer();
Source input = new DOMSource(doc);
Result output = new StreamResult(System.out);
idTransform.transform(input, output);
}
catch (FactoryConfigurationError e) {
System.out.println("Could not locate a JAXP factory class");
}
catch (ParserConfigurationException e) {
System.out.println(
"Could not locate a JAXP DocumentBuilder class"
);
}
catch (DOMException e) {
System.err.println(e);
}
catch (TransformerConfigurationException e) {
System.err.println(e);
}
catch (TransformerException e) {
System.err.println(e);
}
}
}
//
Read output from SimpleSVG1.java, i.e., XML with namespace prefixes
//
Input in file svg.xml, with added newlines:
// <?xml
version="1.0" encoding="UTF-8"
standalone="no"?>
// <!--An example
from Chapter 10 of Processing XML with Java-->
// <?xml-stylesheet type="text/css"
href="standard.css"?>
// <s:svg xmlns:s="http://www.w3.org/2000/svg">
// <s:desc>An
example from Processing XML with Java</s:desc></s:svg>
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.File;
public class DOMReader {
public static void
main(String[] args) {
try {
DocumentBuilderFactory
builderFactory
= DocumentBuilderFactory.newInstance();
builderFactory.setCoalescing(true);
builderFactory.setNamespaceAware(true);
DocumentBuilder
builder
= builderFactory.newDocumentBuilder();
Document response = builder.parse(new
File("svg.xml"));
String nsUri
= response.getDocumentElement().getNamespaceURI();
NodeList descs = response.getElementsByTagNameNS(nsUri, "desc");
Node datum = descs.item(0);
Text result = (Text) datum.getFirstChild();
System.out.println("contents
of desc: " +result.getNodeValue());
}
catch
(Exception e)
{
System.out.println("exception:
" + e);
}
}
}
java DOMReader
contents of desc: An example from
Processing XML with Java