2015-04-30 2 views
2

Это мой security.xmlСравнение двух значений атрибутов с использованием SAX и Java

Я хочу проверить temperature и t имеют одинаковую метку и presence и p имеют тот же метка с использованием SAX и Java.

может кто-нибудь мне помочь !!?

<root> 

    <component classname="temp.impl.Temperatureservice" name="TemperatureSecurity"> 
<attributes> 
     <attribute> 

    <name> temperature</name> 

     <label>L</label> 

    </attribute> 
</attributes> 
    </component> 


    <component classname="pres.impl.Presenceservice" name="PresenceSecurity"> 
<attributes> 
    <attribute> 

<name>presence</name> 

     <label>H</label> 

    </attribute> 
    </attributes> 
</component> 

<component classname="anal.AnalyserService" name="ManagerSecurity"> 
<attributes> 
     <attribute > 

     <name>t</name> 

     <label>L</label> 

     </attribute> 

<attribute> 

<name>p</name> 

    <label>H</label> 

     </attribute> 
</attributes> 
    </component> 


</root> 

, что я пробовал:

public class MyHandler extends DefaultHandler { 

private List<Component> compList = null; 
private Component comp = null; 
boolean bnameatt = true; 
boolean bName = true; 
boolean blabel = false; 
String label; 
private String temp; 
private String lab; 

@Override 
public void startElement(String uri, String localName, String qName, Attributes attributes) 
     throws SAXException { 

    if (qName.equalsIgnoreCase("component")) { 

     String name = attributes.getValue("name"); 

     comp = new Component(); 
     comp.setName(name); 
     //initialize list 
     if (compList == null) { 
      compList = new ArrayList<>(); 
     } 
    } else if (qName.equalsIgnoreCase("name")) { 
     temp = attributes.getValue("name"); 
     bnameatt = true; 
    } else if (qName.equalsIgnoreCase("label")) { 
     lab = attributes.getValue("label"); 
     blabel = true; 

    } 
} 

@Override 
public void endElement(String uri, String localName, String qName) throws SAXException { 
    System.out.println("temp " + temp + " lab " + lab); 
    if (temp.equalsIgnoreCase("temperature")) { 

     label = lab; 
    } else if (temp.equalsIgnoreCase("t")) { 
     System.out.println("temp " + temp + " lab " + lab); 
     if (lab.equals(label)) { 
      System.out.println("okk"); 
     } else { 
      System.out.println("not ok"); 
     } 
    } 
    blabel=false; 
    bnameatt=false; 
} 

}

я есть NullPointerException на saax.MyHandler.endElement (MyHandler.java:56) if(temp.equalsIgnoreCase("temperature")

+0

Как вы пытаетесь идти на решение этого? В чем твоя проблема? с чем ты застрял? – daphshez

+0

Я добавляю то, что я пробовал на почту – mina

+0

ваш пример неполный, так что трудно сказать, что не так. у вас есть определенный endElement? где-то ваш строитель и ваши булевские флаги должны быть сброшены. также символы - это неправильное место для сравнения. вам нужно опубликовать MVCE и более четко указать, что такое ваша ошибка. –

ответ

1

Вы должны использовать endElement, чтобы сохранить то, что вы создали с помощью builder и builder1, а затем сравнить его с предыдущими результатами. Что-то вроде:

public void endElement(String uri, String localName, String qName) { 
     if (builder.toString().equals("temperature")) 
      temprature_label = builder1.toString(); 
     else if (builder.toString().equals("t")) { 
      if (builder1.toString().equals(temprature_label)) 
       System.out.println("okkk"); 
      else 
       System.out.println("not ok"); 
     } 
    } 
+0

спасибо youuuu i work :) – mina

1
public void startElement(String uri, String localName, String qName, Attributes attributes) 
       throws SAXException { 

      if (qName.equalsIgnoreCase("component")) { 
       String classname = attributes.getValue("classname"); 
       String name = attributes.getValue("name"); 
       System.out.println("path du componsant= " + classname + " nom de composant est " + name); 
       bName = true; 
      } 
      if (qName.equalsIgnoreCase("attribute")) { 
       temp = attributes.getValue("name"); 

       lab=attributes.getValue("label"); 
      } 

     } 

     @Override 
     public void endElement(String uri, String localName, String qName) throws SAXException { 

      if (temp != null) { 
       if (temp.equalsIgnoreCase("temperature")) { 

        label = lab; 
       } else if (temp.equalsIgnoreCase("t")) { 
        System.out.println("temp " + temp + " lab " + lab); 
        if (lab.equals(label)) { 
         System.out.println("okk"); 
        } else { 
         System.out.println("not ok"); 
        } 
       } 
       blabel = false; 
       bnameatt = false; 
      } 
     }