Quiero agregar la declaración a un documento XML generado en Javascript, pero no encontré suficiente documentación.
Digamos que quiero crear programáticamente (usando Javascript) el siguiente documento XML:
<?xml version="1.0" encoding="UTF-8"?> <people> <person first-name="eric" last-name="jung" /> </people>Aquí está el código que hice:
let doc = document.implementation.createDocument("", "", null); let peopleElem = doc.createElement("people"); let personElem = doc.createElement("person"); personElem.setAttribute("first-name", "eric"); personElem.setAttribute("last-name", "jung"); peopleElem.appendChild(personElem); doc.appendChild(peopleElem); let docStr = new XMLSerializer().serializeToString(doc.documentElement); console.log(docStr); // produces: // <people> // <person first-name="eric" last-name="jung" /> // </people> // and not: // <?xml version="1.0" encoding="UTF-8"?> // <people> // <person first-name="eric" last-name="jung" /> // </people> ¿Cómo debo hacer para obtener la <?xml version="1.0" encoding="UTF-8"?> en el XML generado?
Nota: sé que agregar una declaración es inútil en este caso, pero eventualmente quiero usar un espacio de nombres específico y también agregar entidades XML personalizadas a mi documento.
Gracias por tu ayuda.
Aquí hay una forma de hacerlo.
Consulte la lista de tipos de nodos compatibles para XMLSerializer .
Hay un nodo ProcessingInstruction que se puede crear con el método createProcessingInstruction .
Finalmente, debe serializar todo el documento, no solo documentElement .
const doc = document.implementation.createDocument("", "", null); const peopleElem = doc.createElement("people"); const pi = doc.createProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"'); doc.insertBefore(pi, doc.firstChild); const personElem = doc.createElement("person"); personElem.setAttribute("first-name", "eric"); personElem.setAttribute("last-name", "jung"); peopleElem.appendChild(personElem); doc.appendChild(peopleElem); const docStr = new XMLSerializer().serializeToString(doc); console.log(docStr);