我正在尝试创建以下元素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:
我目前正在阅读有关节点名区分大小写的this文章。但这与我的问题无关紧要,因为我的代码未使用
<![CDATA]]>
解析,而我宁愿不使用.innerHTML
。 最佳答案
您需要使用createElementNS()
/ setAttributeNS()
并提供 namespace ,而不仅仅是别名/前缀。该示例使用urn:v
作为 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>