2013-01-09 192 views
-2

我這樣做爲什麼我的變量爲空?

package file; 

    import java.io.IOException; 

    import org.apache.log4j.Logger; 
    import org.xml.sax.Attributes; 
    import org.xml.sax.ContentHandler; 
    import org.xml.sax.Locator; 
    import org.xml.sax.SAXException; 
    import org.xml.sax.XMLReader; 
    import org.xml.sax.helpers.LocatorImpl; 
    import org.xml.sax.helpers.XMLReaderFactory; 

    public class GetNatureSax implements ContentHandler { 

     private final static Logger _logger = Logger.getLogger(GetNatureSax.class.getName()); 
     private boolean isCurrentElement = false; 
     private Locator locator; 
     private String _parameterValue = null; 

     public GetNatureSax() { 
      super(); 
      locator = new LocatorImpl(); 
     } 

     public String getValeurParametre() { 
      return _parameterValue; 
     } 

     public void setDocumentLocator(Locator value) { 
      locator = value; 
     } 

     public void startDocument() throws SAXException {} 

     public void endDocument() throws SAXException {} 

     public void startPrefixMapping(String prefix, String URI) throws SAXException { 

     } 

     public void endPrefixMapping(String prefix) throws SAXException {} 

     public void startElement(String nameSpaceURI, String localName, String rawName, Attributes attributs) 
     throws SAXException { 
      if (localName.equals("Nature")) { 
       isCurrentElement = true; 
      } 
     } 

     public void endElement(String nameSpaceURI, String localName, String rawName) throws SAXException { 

      if (localName.equals("Nature")) { 
       isCurrentElement = false; 
      } 
     } 

     public void characters(char[] ch, int start, int end) throws SAXException { 
      if (isCurrentElement) { 
       _parameterValue = new String(ch, start, end); 
      } 
     } 

     public void ignorableWhitespace(char[] ch, int start, int end) throws SAXException { 
      System.out.println("espaces inutiles rencontres : ..." + new String(ch, start, end) + "..."); 
     } 

     public void processingInstruction(String target, String data) throws SAXException { 
      System.out.println("Instruction de fonctionnement : " + target); 
      System.out.println(" dont les arguments sont : " + data); 
     } 

     public void skippedEntity(String arg0) throws SAXException {} 

     public void parseFichier(String i_fichierATraiter) { 
      XMLReader saxReader; 
      try { 

       saxReader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); 
       saxReader.setContentHandler(new GetNatureSax()); 
       saxReader.parse(i_fichierATraiter); 
       System.out.println(_parameterValue); 
      } catch (SAXException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

我的XML:

... 
<Reference> 
    <Nature>ACHAT</Nature> 
    <Statut>2</Statut> 
    <Type-Gest>RE</Type-Gest> 
    <Gest>RE_ELECTRA</Gest> 
    <Type-Res>D</Type-Res> 
    <Nb-h>24</Nb-h> 
</Reference> 
... 

爲什麼當執行此行

的System.out.println(_parameterValue);

我的變量爲空之前,當我調試,因爲你實例化一個新GetNatureSax,並把它交給SaxReaderContent Handler我的變量不爲空

+2

請在這裏發佈時刪除這麼長的評論。 – Juvanis

+2

也請只留下相關的代碼。 –

+0

您正在獲取名爲「Nature」的標籤的內容。你可以向我們展示你的XML嗎? – Alex

回答

1

所以,當解析已經結束,這是已被修改,其中新GetNatureSax實例已在現場_parameterValue集,而不是當前實例(本)

只需修改parseFichier方法是這樣的:

saxReader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); 
saxReader.setContentHandler(this); // here 
saxReader.parse(i_fichierATraiter); 
System.out.println("Found: " + getValeurParametre()); 
+0

作品!謝謝 ;) – Mercer

1

用我的調試器,我可以看到使用兩個GetNatureSax

saxReader.setContentHandler(new GetNatureSax()); 

這將創建一個第二GetNatureSax對象,其中是其中值是被組。

它更改爲

saxReader.setContentHandler(this); 

固定的問題。