以编程方式将 XML 声明添加到 XML 文档

Add XML declaration to XML document programmatically

我想将声明添加到 Javascript 中生成的 XML 文档中,但我没有找到足够的文档。

假设我想以编程方式(使用 Javascript)创建以下 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<people>
  <person first-name="eric" last-name="jung" />
</people>

这是我做的代码:

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>

如何获取生成的XML中的<?xml version="1.0" encoding="UTF-8"?>?

注意:我知道在这种情况下添加声明是没有用的,但最终我想使用特定的命名空间并将自定义 XML 实体添加到我的文档中。

感谢您的帮助。

这是一种方法。

参见list of compatible node types for XMLSerializer

ProcessingInstruction node that can be created with createProcessingInstruction方法。

最后,您需要序列化整个文档,而不仅仅是 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);