2014-11-17 11 views
5

Sto cercando di creare il seguente elemento nodetree:Creare XML DOM Element mantenendo caso sensibilità

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

con:

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

Tuttavia, document.createElement("v:custProps") genera <v:custprops> al contrario di <v:custProps>. Esiste comunque la possibilità di sfuggire a questo parsing?


Edit 1:

Attualmente sto leggendo this articolo su maiuscole e minuscole nome nodo. È leggermente irrilevante per il mio problema, anche se il mio codice non è analizzato con <![CDATA]]> e preferisco non utilizzare .innerHTML.

risposta

3

È necessario utilizzare createElementNS()/setAttributeNS() e fornire lo spazio dei nomi, non solo l'alias/prefisso. L'esempio utilizza urn:v come spazio dei nomi.

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> 
2

Non è consigliabile utilizzare document.createElement per i nomi qualificati. Verifica se lo document.createElementNS può servire meglio ai tuoi scopi.

+0

'.createElementNS' manca lo spazio dei nomi per gli elementi XML sembra .. Ho provato ed il Javascript generato restituisce un risultato insensibile caso. – Xenyal

Problemi correlati