6

I'm working with some very unintuitive xml (all the tags are things like "TX", "H", "VC").

I'd like to make a copy of this data, but with all of the tags renamed to what they actually mean. Can I create a new, empty document to put my new, nicely named tags in to?

I've tried this:

doc = (new DOMParser()).parseFromString("", 'text/xml');

but when I do so, I wind up with a document that has a child node, rather than being empty. Furthermore, that child's tagname is "parsererror"

So, any ideas how I can create an empty document?

5 Answers 5

6

I hade the same issue and I solved it like below:

xmlDoc = document.implementation.createDocument("", "", null);
root = xmlDoc.createElement("description");
xmlDoc.appendChild(root);
alert((new XMLSerializer()).serializeToString(xmlDoc));
Sign up to request clarification or add additional context in comments.

Comments

3

You can create an empty document in a W3C DOM compliant browser (IE9+ and the rest) with the following code.

var doc = (new DOMParser()).parseFromString('<dummy/>', 'text/xml');
doc.removeChild(doc.documentElement);

Comments

2

The WHATWG's specification of the createDocument method allows one to provide null for each of the 3 arguments to createDocument, to have an "empty" XML document created and returned -- one without any root node and with the application/xml as its content type.

When the document object is available (a compliant Web user agent), the implementation with the createDocument method can be referred to with document.implementation:

document.implementation.createDocument(null, null, null);

You may then trivially attach a root node of your choosing to it by simply appending it as you otherwise would, as follows (empty_doc would refer to the document created and returned by the call above):

empty_doc.appendChild(empty_doc.createElement("foobar"));

Comments

1

I don't think you can create a document without the root node. You could create a fake node:

doc = (new DOMParser()).parseFromString("<dummy/>", 'text/xml');

However, a better solution might be to create constants for the node names:

// Use different variable names, like RealTxName, if desired
var REAL_TX_NAME = "TX";
var REAL_H_NAME = "H";

...
doc.find (REAL_TX_NAME);
...

1 Comment

Thanks. I've thought about that approach to, and may wind up using it. I'm just taking a few steps in several directions to see which way looks/feels more promising.
1
var xmldom = require('xmldom');
var tree = (new xmldom.DOMImplementation()).createDocument();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.