2017-01-25 67 views
0

我試圖做在MATLAB XML解析,它使用的JavaSE org.w3c.dom包getChildNodes()返回文本,而不是節點列表

我有一個XML結構像

<?xml version="1.0" encoding="utf-8"?> 
 
<tada> 
 
    <Filters> 
 
    <filter id="1" name="name1" renderType="type1"> 
 
     <bool name="par1" value="false"/> 
 
     <bool name="par2" value="false"/> 
 
     <int name="par3" value="200"/> 
 
     <int name="par4" value="1"/> 
 
     <float name="par5" value="2"/> 
 
     <bool name="par6" value="false"/> 
 
     <int name="par7" value="1"/> 
 
    </filter> 
 
    <filter id="6" name="name2" renderType="type2"> 
 
     <bool name="par1" value="false"/> 
 
     <bool name="par2" value="false"/> 
 
     <int name="par3" value="200"/> 
 
     <int name="par4" value="1"/> 
 
     <float name="par5" value="2"/> 
 
     <bool name="par6" value="false"/> 
 
     <int name="par7" value="1"/> 
 
     <int name="par8" value="1"/> 
 
     <array name="par9" row="2" col="2" > 
 
     5.0162 0.96182 
 
     0.22294 0.96356 
 
     </array> 
 
    </filter> 
 
    </Filters> 
 
</tada>

我試圖獲得訪問權限,讓說屬性renderType元素過濾NAME =「吶ME2"

我嘗試做以下

config = xmlread(xmlFileName); 
 

 
section = config.getDocumentElement().getElementsByTagName('Filters').item(0); 
 
    
 
filters = section.getChildNodes(); 
 
// filters = section.getElementsByTagName('filter'); 
 

 
for i = 0:filters.getLength()-1 
 
    filter = filters.item(i); 
 
    if strcmp(filter.getAttribute('name'), 'name2') 
 
     filter.setAttribute('renderType', 'graph2D'); 
 
    end 
 
end

我希望過濾器應該是一個節點列表(如文檔說http://docs.oracle.com/javase/6/docs/api/org/w3c/dom/package-summary.html?browser=F1help),但它返回作爲文本(僅包含空格)。

如果我寫

filters = section.getElementsByTagName('filter');

然後我得到想要的節點列表,但問題是,這種方式是不合適的。因爲我需要通過值選擇節點名稱屬性。

你能幫我嗎?我做錯了什麼?

謝謝你的幫助。

回答

0

您的XML文檔包含元素之間的空白。 XML解析器認爲這很重要,當您使用DOM方法getChildNodes()時,它包含子元素和包含空白的子文本節點。當處理子節點時,如果你想忽略空白文本節點,你必須明確地這樣做。

+0

謝謝。但無論如何,不​​應該.getChildNodes()返回一些節點列表?我怎樣才能得到元素列表,而不指定標籤名稱? – Physman

+0

再次感謝你。我明白你的意思。儘管**過濾器**不是NodeList,我可以正常使用.item(...)。我只是應該檢查**過濾器**節點的結果類型。 – Physman

+0

我想你可能會犯錯誤,使用「節點」和「元素」,就好像它們是一樣的東西。 –

相關問題