2013-07-09 36 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 –