2013-03-01 3 views
0

을 사용하는 경우 String dataread = se.getElementText();을 설정합니다. 그 문자열 (dataread)을 즉시 인쇄하고 있습니다.StAX 구문 분석 예제에서 루프 외부의 문자열 변수

그러나 내 코드의 다른 곳에서는 작동하지 않으며 심볼 dataread을 찾을 수 없다고보고합니다. 코드로 넘어가는 5 개의 다른 지점이 시도되는 것을 보게 될 것입니다. if 문 내의 첫 번째 행이 작동합니다.

"dataread"라는 문자열을 프로그램의 다른 곳에서 어떻게 사용할 수 있습니까?

감사

public static void main(String[] args) throws FileNotFoundException, XMLStreamException 
{ 
    // TODO code application logic here 
    //System.out.println("Here"); 
    //String filename = null; 
    String filename = "BookCatalog2.xml"; 
    XMLInputFactory factory = XMLInputFactory.newInstance(); 
    XMLEventReader reader = factory.createXMLEventReader(new FileReader(filename)); 
    while(reader.hasNext()) 
      { 
       XMLEvent event = reader.nextEvent(); 
       XMLEvent nextEvent = reader.peek(); 
       switch (event.getEventType()) 
         { 
        case XMLEvent.START_ELEMENT: 

         StartElement se = event.asStartElement(); 
         //System.out.println("Here"); 
         //System.out.print("<" + se.getName()); 

         //System.out.print(" " + se.getName()); 
         //System.out.printf("\n"); 
         String elem = se.getName().toString(); 
         //String elem = "1"; 
         //System.out.printf("elem = %s\n",elem); 
         //String ele = event.getAttributeName(); 

         System.out.printf("event = %s\n",se.getName()); 

         //if(se.getName().toString() == "{http://www.publishing.org}Date") 
         if(se.getName().toString().equals("Date")) 
         //if(elem == "1") 
         { 
          System.out.println("Here !!!!!!!!!!!!!!!!!"); 
          String dataread = reader.getElementText(); 
          //System.out.printf("data = %s\n",reader.getElementText()); 
          System.out.printf("data = %s\n",dataread); 
         } 
         Iterator attributes = se.getNamespaces(); 
         System.out.printf("DATA READ = %s\n",dataread); 
         while(attributes.hasNext()) 
         { 
          Attribute attr= (Attribute)attributes.next(); 
          System.out.print(" " + attr.getName() + "=\"" +attr.getValue() +"\""); 
          System.out.printf("\n"); 
         }//end while loop 
        System.out.print(">"); 
         if(nextEvent.isCharacters()) 
         { 
          Characters c = reader.nextEvent().asCharacters(); 
          if(!c.isWhiteSpace()) 
          System.out.print(c.getData()); 
          System.out.printf("\n"); 


         }// end if 
         System.out.printf("DATA READ = %s\n",dataread); 
        /*case XMLEvent.END_ELEMENT> 
         EndElement ee = event.asEndElement(); 
         System.out.print("</"+ee.getName()+">"); 
         break; 
         * */ 
         System.out.printf("DATA READ = %s\n",dataread); 
         }// end witch 
       System.out.printf("DATA READ = %s\n",dataread); 
      }// end while 
    System.out.printf("DATA READ = %s\n",dataread); 
    reader.close(); 
}//end Main 
}// public claSS 

답변

1

무엇 모든 방법은 동일한 수준 또는 그 아래입니다 당신이 수준에서 지역 변수를 선언하기 만하면됩니다. 이제는 if 절에서 변수를 선언하고 있으므로 if 절에서만 변수에 도달 할 수 있습니다.

3

문자열이 첫 번째 IF의 범위 내에 있으므로 메서드 시작 부분에 선언해야합니다.

String filename = "BookCatalog2.xml";

전 후 선언하십시오 :

String filename = "BookCatalog2.xml"; 
String dataread = ""; 
2

dataread 변수 귀하의 문자열이 경우 절 ONLY에게 내에서 범위가 로컬 변수입니다.

그런 이유로 if 블록 외부에서이 변수에 액세스 할 수 없습니다. 이 변수를 인쇄 할 때이 변수에 액세스 할 수있게하려면 if 문 앞에 선언해야합니다. 예 :

String dataread = null; 
if (test) { 
    dataread = ...; 
} 

System.out.println(dataread); // etc