大家好,我有一段时间试图解析一个xml字符串。字符串看起来像这样。
<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>
我搜索过并搜索过,但我一直在寻找的是如何使用jquery或javascript读取xml文件,这似乎不符合我的要求。
这是我创建并试用的代码,但我一直都在失败。
var len = xmlDoc2.getElementsByTagName("row")[0].childNodes.length;
for (var i=0; i < (TotalSheetNodes*len); i++){
mysheet.innerHTML +=(xmlDoc2.getElementsByTagName("c")[i].getAttribute("r") ) + "</br>";
var v1 = (xmlDoc2.getElementsByTagName("c")[i].getAttribute("r") );
/*if the element does not have an attribute of t then add it to then add it to the dictionary*/
if (xmlDoc2.getElementsByTagName("c")[i].getAttribute("t") == null)
{
var v2 = xmlDoc2.getElementsByTagName("v")[i].childNodes[0].nodeValue
Jcell.Dictionary[v1]= v2
}
//else addid to the sheet element so we can extract the value later from shared string.
else{
Jcell.Sheet[(v1)] = v1;
}
由于这条线,它失败了。
var len = xmlDoc2.getElementsByTagName("row")[0].childNodes.length;
所以这是我的基本问题是什么是将所有子节点置于“行”下的最简单方法?另外,我想决定子节点是否具有属性“T” 我想将值分配给不同的对象变量。 非常感谢您的回复。 我真的很想用普通的JavaScript来做这件事,而且更喜欢远离任何图书馆。
答案 0 :(得分:1)
您确定xmlDoc2.getElementsByTagName("row")
至少有一个结果吗?否则,语法似乎没问题。
此外,您的脚本代码段中缺少大量初始化,否则我们将无法为您提供帮助。
xmlDoc2
- 这是一个解析良好的XML文档对象(或错误消息吗?)TotalSheetNodes
是什么?mysheet
似乎是一个HTML元素?JCell
?这似乎与这个问题无关。编辑:
要遍历(似乎是正确的词,而不是“解析”)您的XML文档,您应该自己遍历每个NodeList。这可能,每个元素都继承了Node接口,而不仅仅是xml文档对象 - 正如你所想的那样。
此外,您不必计算row
s,因为您只对c
感兴趣。一个很大的错误似乎是你的(整个)文档中c
的数量的aritmethic近似,通过在第一行中复制数量为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
}
}
由于您在上面的示例中未使用row
,因此可能只省略外部循环并使用
var cs = xmlDoc2.getElementsByTagName("c");