我正在尝试在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 属性的值来选择节点。
你可以帮帮我吗?我做错了什么?感谢您的帮助。
答案 0 :(得分:0)
您的XML文档包含元素之间的空格。 XML解析器认为这很重要,当您使用DOM方法getChildNodes()时,它包含子元素和包含空格的子文本节点。处理子节点时,如果要忽略空白文本节点,则必须明确地这样做。