getChildNodes()返回Text而不是NodeList

时间:2017-01-25 10:11:44

标签: java xml matlab dom xml-parsing

我正在尝试在MATLAB中进行XML解析,它使用JavaSE包org.w3c.dom

我有像

这样的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>

我正在尝试使用 name =“name2”

来访问元素过滤器的属性 renderType

我正在尝试执行以下操作

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 属性的值来选择节点。

你可以帮帮我吗?我做错了什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的XML文档包含元素之间的空格。 XML解析器认为这很重要,当您使用DOM方法getChildNodes()时,它包含子元素和包含空格的子文本节点。处理子节点时,如果要忽略空白文本节点,则必须明确地这样做。