首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未填充NodeList

未填充NodeList
EN

Stack Overflow用户
提问于 2013-07-10 02:20:33
回答 1查看 228关注 0票数 1

我目前正在开发一个程序,它从组合框(通过.getSelectedIndex())中选择'data type‘的值,然后向下钻取到'first record’并将其作为字符串数组返回。

组合框由相同的XML文件填充,我使用DOM解析器用Java编写代码。

XML代码片段:

代码语言:javascript
复制
    <?xml version="1.0" encoding="UTF-8"?>
   <dealershipParsers>
<Parser id="ADPParser2">
    <data type="Sales" />
        <first record = "DEAL-NO"/>        
    <data type="Service" />
        <first record ="RO"/>                
    <data type="Email" />
        <first record ="CONTROL"/>        
</Parser>

我目前正在使用的Java代码尝试获取和返回“第一条记录”:

代码语言:javascript
复制
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = factory.newDocumentBuilder();
    Document document = docBuilder.parse(fileName);

    //Searches all text 
    document.getDocumentElement().normalize();

    //Gets elements from xml 

    Element elementArray = document.getDocumentElement();
    NodeList listResources = elementArray.getElementsByTagName("Parser");

    Element elemChild = (Element) listResources.item(item);      
    NodeList dataChildren =  elemChild.getElementsByTagName("data"); 

    Element elemFirst = (Element) dataChildren.item(item);
    NodeList firstChildren = elemFirst.getElementsByTagName("first");

    int tam = firstChildren.getLength();
    String[] vecResources = new String[tam];

    for (int i = 0; i < tam; i++) 
    {
       Element elem = (Element) firstChildren.item(0);      
       vecResources[i] =  elem.getAttribute("record"); // change to type
    }        

    //returns an array with all the types of data
    return vecResources;

我已经成功地指出了我的问题是在“dataChildren”,“elemFirst”和“firstChildren”之间的某个地方。'dataChildren‘中有一个计数,但当我在netbeans中进行调试时,它显示'tam’等于0,就像'firstChildren‘一样。

为什么它不能将值从一个节点列表传递到另一个节点列表?我遗漏了什么?

任何建议都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-10 02:31:34

您的XML结构与您的代码“期望的”不匹配。您的代码似乎期望一个分层的XML输入,其中每个Parser包含data节点,每个data包含first节点:

代码语言:javascript
复制
<Parser id="ADPParser2">
    <data type="Sales">
        <first record="DEAL-NO" />
    </data>
    <data type="Service">
        <first record="RO" />
    </data>
    <data type="Email">
        <first record="CONTROL" />
    </data>
</Parser>

但是,您的XML输入是平面的:datafirst节点是Parser的直接子节点。您的缩进似乎表明并非如此(这可能导致了这种混乱),但它实际上等同于:

代码语言:javascript
复制
<Parser id="ADPParser2">
    <data type="Sales" />
    <first record="DEAL-NO" />
    <data type="Service" />
    <first record="RO" />
    <data type="Email" />
    <first record="CONTROL" />
</Parser>

我可以看到两种解决方案:

  • 将XML输入的结构修复为分层结构,就像您的代码所期望的那样。
  • 修复您的代码以使用“平面”样式(尽管我认为这不是您想要的)。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17555438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档