2013-07-09 38 views
1

我目前正在开发一个程序,它从组合框中选择'数据类型'的值(通过.getSelectedIndex()),然后向下钻取'第一条记录'并将其作为字符串数组。NodeList not populating

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

XML代码片段:

<?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代码:

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'一样。

为什么不能将值从一个节点列表传递给另一个节点列表?我错过了什么?

任何意见,将不胜感激。

回答

2

您的XML结构与“预计”代码不匹配。你的代码似乎期待分层XML输入,其中每个Parser持有data节点和每个data持有first节点:

<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。您缩进似乎否则(这可能造成这种混乱)建议,但它确实是等同于:

<Parser id="ADPParser2"> 
    <data type="Sales" /> 
    <first record="DEAL-NO" /> 
    <data type="Service" /> 
    <first record="RO" /> 
    <data type="Email" /> 
    <first record="CONTROL" /> 
</Parser> 

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

  • 解决您的XML输入的结构是分层,就像你的代码所期望的那样。
  • 修复您的代码以使用“平面”风格(尽管我不认为这就是您想要的)。
+0

哦。我的。我不敢相信我错过了!我一直在盯着这愚蠢的事情一个星期试图找出它!当然是!啊谢谢你,谢谢你!那样做了!我首先提出了将我的XML结构修改为分层结构的建议。 –

+0

@senex_subconscious不客气。您可能希望下次提前寻求帮助,而不需要整整一周时间。 :-P –