使用javascript解析XML字符串
大家好,我在解析xml字符串时经历了一段痛苦的时光。绳子看起来像这样使用javascript解析XML字符串,javascript,Javascript,大家好,我在解析xml字符串时经历了一段痛苦的时光。绳子看起来像这样 <sheetData> <row r="1" spans="1:12" x14ac:dyDescent="0.25"> <c r="A1"> <v>1</v> </c>
<sheetData>
<row r="1" spans="1:12" x14ac:dyDescent="0.25">
<c r="A1">
<v>1</v>
</c>
<c r="B1" t="s">
<v>3</v>
</c>
<c r="C1" t="s">
<v>2</v>
</c>
<c r="F1" t="s">
<v>0</v>
</c>
<c r="L1" t="s">
<v>1</v>
</c>
</row>
<row r="2" spans="1:12" x14ac:dyDescent="0.25">
<c r="A2">
<v>1</v>
</c>
<c r="B2" t="s">
<v>4</v>
</c>
</row>
<row r="4" spans="1:12" x14ac:dyDescent="0.25">
<c r="I4">
<v>7</v>
</c>
</row>
</sheetData>
所以这里是我的基本问题,什么是将所有子节点置于“行”下的最简单方法?另外,我想做一个决定,如果子节点的属性为“T”
我想将该值指定给另一个对象变量。
如蒙答复,将不胜感激。
我真的很想用普通的老JavaScript来实现这一点,并且更愿意远离任何库。您确定您的
xmlDoc2.getElementsByTagName(“行”)
至少有一个结果吗?否则,语法似乎很好
另外,您的脚本片段中缺少很多初始化,没有这些,我们将无法帮助您
-这是一个解析良好的XML文档对象(还是一条错误消息?)xmlDoc2
是什么TotalSheetNodes
似乎是HTML元素mysheet
- 什么是
?这似乎与这个问题无关JCell
编辑: 要遍历(似乎是正确的词,而不是“解析”)XML文档,您应该自己循环遍历每个节点列表。这是可能的,每个元素都继承节点接口,而不仅仅是xml文档对象——正如您所相信的那样 此外,您不必计算
行
s,因为您只对c
s感兴趣。一个很大的错误似乎是通过将一行或多行数与第一行的c
元素数相乘,从而对(整个)文档中的c
数进行算术近似-您的xml源代码证明这是错误的
var rows = xmlDoc2.getElementsByTagName("row");
for (var i=0, l=rows.length; i<l; i++) {
var row = rows[i];
var cs = row.getElementsByTagName("c");
for (var j=0, m=cs.length; j<m; j++) {
var c = cs[j];
var t = c.getAttribute("t");
var v = c.getElementsByTagName("v")[0]; // throws an error if there is no "v"
// do whatever you want with row, c, t and v
}
}
您确定
xmlDoc2.getElementsByTagName(“行”)
至少有一个结果吗?否则,语法似乎很好
另外,您的脚本片段中缺少很多初始化,没有这些,我们将无法帮助您
-这是一个解析良好的XML文档对象(还是一条错误消息?)xmlDoc2
是什么TotalSheetNodes
似乎是HTML元素mysheet
- 什么是
?这似乎与这个问题无关JCell
编辑: 要遍历(似乎是正确的词,而不是“解析”)XML文档,您应该自己循环遍历每个节点列表。这是可能的,每个元素都继承节点接口,而不仅仅是xml文档对象——正如您所相信的那样 此外,您不必计算
行
s,因为您只对c
s感兴趣。一个很大的错误似乎是通过将一行或多行数与第一行的c
元素数相乘,从而对(整个)文档中的c
数进行算术近似-您的xml源代码证明这是错误的
var rows = xmlDoc2.getElementsByTagName("row");
for (var i=0, l=rows.length; i<l; i++) {
var row = rows[i];
var cs = row.getElementsByTagName("c");
for (var j=0, m=cs.length; j<m; j++) {
var c = cs[j];
var t = c.getAttribute("t");
var v = c.getElementsByTagName("v")[0]; // throws an error if there is no "v"
// do whatever you want with row, c, t and v
}
}
你有没有看过相关的问题?我可以在javascript中看到almos半打与xml解析相关的问题。正如我在问题中所说的,我看了又看,但我就是找不到任何有用的东西,这就是我发布的原因。在我看来,读取XML文件和读取XML字符串是完全不同的概念,谢谢你的评论。请重命名你的问题,因为你的问题似乎不是“如何解析XML”,我不明白为什么?我正在使用JavaScript解析XML,而不是服务器端语言?我为什么要重命名这个问题?您的变量XMLDoc2似乎包含一个已经解析过的XML文档,不是吗?您看过相关的问题了吗?我可以在javascript中看到almos半打与xml解析相关的问题。正如我在问题中所说的,我看了又看,但我就是找不到任何有用的东西,这就是我发布的原因。在我看来,读取XML文件和读取XML字符串是完全不同的概念,谢谢你的评论。请重命名你的问题,因为你的问题似乎不是“如何解析XML”,我不明白为什么?我正在使用JavaScript解析XML,而不是服务器端语言?我为什么要重命名这个问题?您的变量XMLDoc2似乎包含一个已解析的XML文档,不是吗?XMLDoc2.getElementsByTagName(“行”)它绝对有值。我的问题是,当我遇到一个父元素(比如row)时,我想读取row下的子元素。在我看来,我不需要这样做“var len=xmlDoc2.getElementsByTagName(“行”)[0].childNodes.length”。我认为有一种更好的方法可以识别父节点并循环子节点。Total sheet nodes是xml文件中的行节点总数。我想我应该在这里放一个片段,这样就不会让任何人被大量的代码淹没。“TypeError:xmlDoc2.getElementsByTagName(“c”)[I]未定义”这是我得到的错误。我尝试完成任务的方式的问题是,由于我将总节点数乘以子节点数,因此在第一次尝试读取15个子节点时,父行节点只有5个子节点。和第二个父节点的唯一两个子节点。这些有意义吗?我需要识别每一位家长,然后只解析这是我失败的孩子。是的,我有你的错误(见我的编辑)。您的错误显然不是来自
var len=xmlDoc2.get…
-line。感谢您回答我的问题这就是我想要完成的,我只是因为一个以上的原因无法完成。我稍微修改了您的代码,似乎这一行“for(var j=0;m=cs.length;jxmlDoc2.getElementsByTagName(“行”),它绝对有值。我的问题是,当我遇到一个父元素(如row)时,我想读取row下的子元素。在我看来,我不应该这样做”var len=xmlDoc2.getElementsByTagName(“row”)[0].childNodes.length”。我认为有一种更好的方法,可以只标识父节点并循环子节点。Total sheet nodes是xml f中的总行节点
var rows = xmlDoc2.getElementsByTagName("row");
for (var i=0, l=rows.length; i<l; i++) {
var row = rows[i];
var cs = row.getElementsByTagName("c");
for (var j=0, m=cs.length; j<m; j++) {
var c = cs[j];
var t = c.getAttribute("t");
var v = c.getElementsByTagName("v")[0]; // throws an error if there is no "v"
// do whatever you want with row, c, t and v
}
}
var cs = xmlDoc2.getElementsByTagName("c");