Create XML DOM Element while keeping case sensitiv

2019-02-22 09:21发布

I'm trying to create the following element nodetree:

<v:custProps>
    <v:cp v:nameU="Cost">
</v:custProps>

with:

newCustprop = document.createElement("v:custProps");
newcp = document.createElement("v:cp");
newcp.setAttribute("v:nameU", "Cost");
newCustprop.appendChild(newcp);

However, document.createElement("v:custProps") generates <v:custprops> as opposed to <v:custProps>. Is there anyway to escape this parsing?


Edit 1:

I'm currently reading this article on nodename case sensitivity. It's slightly irrelevant to my problem though because my code is unparsed with <![CDATA]]> and I'd rather not use .innerHTML.

2条回答
Juvenile、少年°
2楼-- · 2019-02-22 10:05

You need to use createElementNS()/setAttributeNS() and provide the namespace, not only the alias/prefix. The example uses urn:v as namespace.

var xmlns_v = "urn:v";
var newCustprop = document.createElementNS(xmlns_v, "v:custProps");
var newcp = document.createElementNS(xmlns_v, "v:cp");
newcp.setAttributeNS(xmlns_v, "v:nameU", "Cost");
newCustprop.appendChild(newcp);

var xml = (new XMLSerializer).serializeToString(newCustprop);

xml:

<v:custProps xmlns:v="urn:v"><v:cp v:nameU="Cost"/></v:custProps>
查看更多
你好瞎i
3楼-- · 2019-02-22 10:14

It's not recommended to use document.createElement for qualified names. See if the document.createElementNS can better serve your purposes.

查看更多
登录 后发表回答