我试图创建以下元素nodetree:
<v:custProps>
<v:cp v:nameU="Cost">
</v:custProps>
使用:
newCustprop = document.createElement("v:custProps");
newcp = document.createElement("v:cp");
newcp.setAttribute("v:nameU", "Cost");
newCustprop.appendChild(newcp);
但是,document.createElement("v:custProps")
生成<v:custprops>
而不是<v:custProps>
。无论如何都要逃避这种解析?
修改1:
我目前正在阅读有关nodename区分大小写的this文章。它与我的问题略有不相关,因为我的代码未被<![CDATA]]>
解析而我又不使用.innerHTML
。
答案 0 :(得分:5)
您需要使用createElementNS()
/ setAttributeNS()
并提供命名空间,而不仅仅是别名/前缀。该示例使用urn:v
作为命名空间。
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>
答案 1 :(得分:2)
建议不要将document.createElement
用于限定名称。看看document.createElementNS
是否可以更好地满足您的目的。