【发布时间】:2021-08-16 10:09:29
【问题描述】:
我想将声明添加到用 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 实体添加到我的文档中。
感谢您的帮助。
【问题讨论】:
-
如果您序列化整个
doc节点而不仅仅是它的根元素/documentElement 节点,难道您不会使用XMLSerializer 获得XML 序列化吗?我不认为 DOM API 将 XML 声明视为一个节点,它是在序列化过程中添加的东西,但我不确定浏览器端 API 在控制这一点方面是否非常灵活。 -
对于“自定义”实体,DOM API 也不是非常灵活和强大,但
createDocument曾经允许传入 DTD/doctype 参数。 -
似乎即使序列化整个文档也不会输出 XML 声明,主要是因为
serializeToString不需要。不确定是否存在更多用于序列化到流或文件的低级 API,其中需要设置/确保特定编码的能力。 -
您是否建议使用诸如this one 之类的库来解决我的问题? (添加声明,添加自定义实体,...)
-
这是 DOM(核心/XML)API 应该支持的处理指令,除非 HTML5 人/DOM4 人已经残废的浏览器 API 不再支持它们。
标签: javascript xml xml-declaration