ROT13 XML Text
import org.apache.xerces.parsers.DOMParser;
import org.apache.xml.serialize.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.IOException;
public class ROT13XML {
public void processNode(Node node) {
if (node.getNodeType() == Node.TEXT_NODE
|| node.getNodeType() == Node.COMMENT_NODE
|| node.getNodeType() == Node.CDATA_SECTION_NODE) {
CharacterData text = (CharacterData) node;
String data = text.getData();
text.setData(rot13(data));
}
}
// note use of recursion
public void followNode(Node node) {
processNode(node);
if (node.hasChildNodes()) {
NodeList children = node.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
followNode(children.item(i));
}
}
}
public static String rot13(String s) {
StringBuffer result = new StringBuffer(s.length());
for (int i = 0; i < s.length(); i++) {
int c = s.charAt(i);
if (c >= 'A' && c <= 'M') result.append((char) (c+13));
else if (c >= 'N' && c <= 'Z') result.append((char) (c-13));
else if (c >= 'a' && c <= 'm') result.append((char) (c+13));
else if (c >= 'n' && c <= 'z') result.append((char) (c-13));
else result.append((char) c);
}
return result.toString();
}
public static void main(String[] args) {
DOMParser parser = new DOMParser();
ROT13XML iterator = new ROT13XML();
for (int i = 0; i < args.length; i++) {
try {
// Read the entire document into memory
parser.parse(args[i]);
Document document = parser.getDocument();
iterator.followNode(document);
// now we serialize the document...
OutputFormat format = new OutputFormat(document);
XMLSerializer serializer
= new XMLSerializer(System.out, format);
serializer.serialize(document);
}
catch (SAXException e) {
System.err.println(e);
}
catch (IOException e) {
System.err.println(e);
}
}
} // end main
}