rendered paste body<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="chrome://global/skin/"?>
<window
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<vbox>
<label value="Input:"/>
<hbox>
<textbox multiline="true"
rows="15"
cols="80"
id="xml-source"
/>
</hbox>
<label value="Parser results:"/>
<hbox>
<textbox multiline="true"
rows="5"
cols="80"
readonly="true"
id="results"
/>
</hbox>
</vbox>
<script type="application/javascript">
const saxReader = Components.classes["@mozilla.org/saxparser/xmlreader;1"]
.createInstance(Components.interfaces.nsISAXXMLReader);
saxReader.errorHandler = {
status: "OK",
errorMessage: "",
locator: null,
reset: function reset() {
this.status = "OK";
this.errorMessage = "";
this.locator = null;
},
error: function error(locator, message) {
this.status = "error";
this.locator = locator;
this.errorMessage = message;
},
fatalError: function fatalError(locator, message) {
this.status = "fatal-error";
this.locator = locator;
this.errorMessage = message;
},
warning: function warning(locator, message) {},
getStatus: function getStatus() {
var response = this.status + " " + this.errorMessage + "\n";
if (!this.locator)
return response;
response += "Line " + this.locator.lineNumber + ", ";
response += "Column " + this.locator.columnNumber;
return response;
}
};
const results = document.getElementById("results");
const xmlSource = document.getElementById("xml-source");
xmlSource.addEventListener("input", function parse(evt) {
saxReader.errorHandler.reset();
saxReader.parseFromString(evt.target.value, "application/xml");
results.value = saxReader.errorHandler.getStatus();
}, true);
</script>
</window>