2017-01-25 6 views
0

Я пытаюсь сделать XML парсинг в MATLAB, который использует JavaSE пакет org.w3c.domgetChildNodes() возвращает текст вместо NodeList

У меня есть 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 элемента фильтра с именем = "на те2"

Я пытаюсь сделать следующий

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

Я ожидаю, что фильтров должны быть NodeList (как документация говорит http://docs.oracle.com/javase/6/docs/api/org/w3c/dom/package-summary.html?browser=F1help), но он вернулся как Текст (который содержит только пробелы).

Если я пишу

filters = section.getElementsByTagName('filter');

тогда я получаю желанный NodeList, но проблема в том, что этот способ не подходит. Потому что мне нужно выбрать узлы по значению name.

Не могли бы вы мне помочь? Что я делаю неправильно?

Благодарим за помощь.

ответ

0

Ваш XML-документ содержит пробелы между элементами. Это считается значимым для синтаксического анализа XML, и когда вы используете метод DOM getChildNodes(), он включает в себя как дочерние элементы, так и дочерние текстовые узлы, содержащие пробелы. При обработке дочерних узлов, если вы хотите игнорировать узлы текстового текста, вы должны сделать это явно.

+0

спасибо. Но так или иначе, не должен .getChildNodes() вернуть мне список узлов? И как я могу получить список элементов без указания имени тега? – Physman

+0

Еще раз спасибо. Я понял, что вы имеете в виду. Несмотря на ** фильтры ** не NodeList, я могу использовать .item (...) нормально. Я просто должен проверить полученный тип ** фильтра ** узла. – Physman

+0

Я думаю, что вы можете ошибиться в использовании «узла» и «элемента», как если бы они были одним и тем же. –