DOM XML:getElementsByTagName(...)[0] 未定义
Posted
技术标签:
【中文标题】DOM XML:getElementsByTagName(...)[0] 未定义【英文标题】:DOM XML: getElementsByTagName(...)[0] is undefined 【发布时间】:2021-06-25 08:48:18 【问题描述】:我正在使用 javascript 生成一个 XML 文件,当我遍历一个对象数组以在 XML 中输入数据时,它给了我你在标题中看到的错误。我正在生成要在其中放置某些元素的 ROW 节点。当我尝试访问元素的 X 位置或尝试将其添加到节点时,我的问题就开始了。
this.array.forEach((element) =>
var node = xmlDoc.createElement("ROW");
var row = xmlDoc.getElementsByTagName("ROW");
var fecha = xmlDoc.createElement("DATE");
xmlDoc.getElementsByTagName("DATE")[0].textContent = element.fecha;
row[0].appendChild(fecha);
var descripcion1 = xmlDoc.createElement("DESCRIPTION");
xmlDoc.getElementsByTagName("DESCRIPTION")[0].textContent =
element.descripcion1;
row[0].appendChild(descripcion1);
var descripcion2 = xmlDoc.createElement("DESCRIPTION2");
xmlDoc.getElementsByTagName("DESCRIPTION2")[0].textContent =
element.descripcion2;
row[0].appendChild(descripcion2);
var nombre = xmlDoc.createElement("NAME");
xmlDoc.getElementsByTagName("NAME")[0].textContent = element.nombre;
row[0].appendChild(nombre);
rowset[0].appendChild(node);
);
在这里,我将告诉你我是如何生成 XML 的。
var xmlDoc = document.implementation.createDocument(null, "filename");
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function ()
if (xhttp.readyState == 4 && xhttp.status == 200)
var xmlDoc = xhttp.responseXML;
xhttp.open("GET", "filename.xml", true);
xhttp.send();
;
var xmlString = "<ROWSET></ROWSET>";
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml");
var rowset = xmlDoc.getElementsByTagName("ROWSET");
【问题讨论】:
首先,从事件处理程序中拉出xhttp.open
和xhttp.send
行,请求永远不会发送。其次,看看***.com/questions/23667086/…
@Teemu 抱歉,但这对我的问题没有帮助
还要注意,最后一个 sn-p 中的 rowset
包含一个元素。我想您的示例结构错误,它并不代表您的真实代码。
我想要一个名为 ROWSET 的父元素,在其中放置子元素 ROW 和它们自己的子元素。我不想重复 ROWSET。 @Teemu
【参考方案1】:
您尝试在追加之前从文档中获取新节点。
但是您不需要从文档中获取创建的节点,您已经在变量中拥有它。此外,ParentNode.appendChild()
返回附加节点,因此可以嵌套/链接调用。
这是一个演示:
// create a document with a "ROWSET" document element node
var xmlDoc = document.implementation.createDocument('', 'ROWSET');
// get the "ROWSET" element node
var rowSet = xmlDoc.documentElement;
// create + append a "ROW", keep it in a variable
var row = rowSet
.appendChild(xmlDoc.createElement('ROW'));
// create + append a "DATE", set text content
row
.appendChild(xmlDoc.createElement('DATE'))
.textContent = 'A Date'
// create + append a "DESCRIPTION", create + append text node
row
.appendChild(xmlDoc.createElement('DESCRIPTION'))
.appendChild(xmlDoc.createTextNode('some content'));
console.dir((new XMLSerializer()).serializeToString(xmlDoc));
【讨论】:
以上是关于DOM XML:getElementsByTagName(...)[0] 未定义的主要内容,如果未能解决你的问题,请参考以下文章