2011-05-31 46 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