【问题标题】:getChildNodes() returns Text instead of NodeListgetChildNodes() 返回 Text 而不是 NodeList
【发布时间】:2017-06-10 11:13:06
【问题描述】:

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

我有一个像

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

获取元素 filter 的属性 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

我希望 filters 应该是一个 NodeList(如文档所述 http://docs.oracle.com/javase/6/docs/api/org/w3c/dom/package-summary.html?browser=F1help),但它作为 Text 返回(其中包含只有空格)。

如果我写

filters = section.getElementsByTagName('filter');

然后我得到想要的NodeList,但问题是这种方式不合适。因为我需要通过 name 属性的值来选择节点。

你能帮帮我吗?我做错了什么?

感谢您的帮助。

【问题讨论】:

    标签: java xml matlab dom xml-parsing


    【解决方案1】:

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

    【讨论】:

    • 谢谢。但无论如何, .getChildNodes() 不应该返回一些节点列表吗?以及如何在不指定标签名称的情况下获取元素列表?
    • 再次感谢您。我明白你的意思。尽管 filters 不是 NodeList,但我可以正常使用 .item(...)。我只需要检查 filter 节点的结果类型。
    • 我认为您可能会错误地使用“节点”和“元素”,就好像它们是同一个东西一样。
    猜你喜欢
    • 2012-05-19
    • 1970-01-01
    • 2012-06-02
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多