最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

xml - creating a new, empty document with javascript - Stack Overflow

programmeradmin1浏览0评论

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?

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?

Share Improve this question asked May 18, 2009 at 23:30 morgancodesmorgancodes 25.3k39 gold badges138 silver badges191 bronze badges
Add a comment  | 

5 Answers 5

Reset to default 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));

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);

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"));

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);
...
var xmldom = require('xmldom');
var tree = (new xmldom.DOMImplementation()).createDocument();
发布评论

评论列表(0)

  1. 暂无评论