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.openxhttp.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] 未定义的主要内容,如果未能解决你的问题,请参考以下文章

Python基于 DOM 的 XML 文档解析(xml.dom.minidom)

dom解析xml文档的步骤

xml.dom 二

XML —— DOM方式解析XML

XML DOM学习

2017/4/26-DOM解析XML文件