2011-05-31 64 views
1

我用Javascript解析XML。我的XML看起来像这样:JS XML解析:值不变

<?ml version="1.0" encoding="UTF-8"> 
<IPC_XML> 
<dfr> 
<dfr> 
<data> 
<analog> 
    <channel index="0"> 
     <label>Channel 1</label> 
    </channel> 
    <channel index="1"> 
     <label>Channel 2</label> 
    </channel> 
</analog> 
</data> 
</dfr> 
</dfr> 
</IPC_XML> 

忽略奇怪的结构(超出我的控制范围)。我正在运行这个JS代码:

function updateAnalogCfgValues (xmlDoc) { 
var analogCfgs = xmlDoc.selectNodes ("//channel"); 
var cfg = analogCfgs.nextNode(); 
var cnt = 1; 

while (cfg !== null) { 
    var node = document.getElementById ("aChan"+cnt); 
    var tmp = document.createElement ("b"); 
    tmp.innerText = cfg.selectSingleNode ("//label").text; 
    node.appendChild (tmp); 

    cfg = analogCfgs.nextNode(); cnt++; 
} 
} 

当我在调试器看东西,事情看起来很好。我可以看到cfg变量的变化,我可以看到它的第一个孩子是<label>元素,其值也在变化。问题是,当我查看HTML时,我看到的只是一遍又一遍的“频道1”。该文本从不改变。有任何想法吗?

编辑:任何机会我的selectSingleNode电话现在'刷新'(缺乏更好的术语)?

+0

我想尝试的第一件事是将标签更改为/标签 - 但我无法测试,因此我不确定它的答案是否... – Murph 2011-05-31 16:42:48

+0

使用'/ label',我得到对于没有文本属性的空对象的例外。 – Nik 2011-05-31 16:47:14

+0

嗯,只是标签呢? – Murph 2011-06-01 07:44:42

回答

1

查看XPath教程并从同事那里获得一些帮助可以找到答案。我需要我的搜索字符串为.//Label。这会选择我当前的通道节点,然后查找标签节点。之前,它只是在整个文档中搜索第一个标签节点,这就是事情没有改变的原因。

+0

这是我最初的猜测(它是根到底) - 但我意识到“cfg.selectSingleNode”会隐含地包​​含“。”。这有点奇怪... – Murph 2011-06-01 07:47:34