2013-03-01 31 views
0

在一個StAX解析示例中,我設置了一個String dataread = se.getElementText();。 我正在成功地打印該字符串(dataread)。使用外部循環的字符串變量

但是,在我的代碼中的任何其他地方,它不會工作,它報告它找不到符號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是隻有if子句中的範圍的局部變量。

因此,您將無法在if塊之外訪問此變量。爲了在打印時允許訪問這個變量,你必須在if語句之前聲明它。例如:

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

System.out.println(dataread); // etc 
相關問題