2013-07-09 11 views
1

현재 저는 (.getSelectedIndex()를 통해) 콤보 상자에서 선택된 '데이터 유형'의 값을 취한 다음 '첫 번째 레코드'를 드릴 다운하여 a 문자열 배열.NodeList가 채워지지 않습니다

콤보 상자에는 동일한 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> 

:

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'은 'firstChildren'과 마찬가지로 0과 같습니다.

왜 하나의 노드리스트에서 다른 노드리스트로 값을 전달할 수 없습니까? 내가 뭘 놓치고 있니?

모든 조언을 주시면 감사하겠습니다.

답변

2

XML 구조가 사용자가 "예상 한"코드와 일치하지 않습니다. 코드는 각 Parserdata 노드를 보유 계층 XML 입력을 기대하는 것 같다 각 datafirst 노드를 보유 :

<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. 귀하의 들여 쓰기 그렇지 않으면 (아마이 혼란을 야기하는) 제안 것 같다,하지만 정말하는 것과 같습니다

  • 계층 적으로 당신의 XML 입력의 구조를 수정 : 나는 두 가지 솔루션을 볼 수 있습니다

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

    코드에서 기대하는 것처럼

  • "플랫"스타일로 작업하도록 코드를 수정하십시오 (필자가 원하는 것은 아닐지라도).
+0

오. 나의. 나는 내가 그것을 놓쳤다라고 생각할 수 없다! 나는 그것을 파악하려고 노력하고있는 1 주일 동안이 어리석은 물건을 꼼짝 않고 바라보고 있었다! 예 물론! 감사합니다. 감사합니다. 그랬어! 필자는 XML 구조를 계층 구조로 수정하는 첫 번째 제안을했습니다. –

+0

@senex_subconscious 환영합니다. 다음 번에 조금 더 일찍 도움을 요청하고 싶을 수도 있습니다. 일주일 동안이 일에 매달릴 필요가 없습니다. :-피 –