我正在使用stsx在xml文件的「rules」標記下的xsd部分中搜索字符串「t_val_calc_pwr_consumed」&「t_val_calc_enrg_accumulated」。當我嘗試在每個 「ElementDefinitionModel」 標籤的規則部分進行搜索,我得到一個空指針異常使用Stax搜索XML文件中的字符串
XML文件..
<elementDefinitionModel manufacturerInSymbol="CARLO GAVAZZI" minSupportedVersionInSymbol="1.4" modelInSymbol="EM24-DIN_AV9_3_X_IS" modelQualifierInSymbol="EM24-DIN_AV9_3_X_IS" symbolTag="CARLO$GAVAZZIEM24-DIN_AV9_3_X_ISEM24-DIN_AV9_3_X_IS">
<rules>
<rule>
<r:collection enabled="true" level_one_interval="5" level_two_interval="15" mode="normalMode" name="CollectionRule_t_val_calc_enrg_interval">
<r:datapoint programmaticName="t_val_calc_enrg_interval" />
<r:normal>
<r:currentValue interval="300" />
</r:normal>
<r:accelerated interval="30" />
<r:computation formulaType="EnergyIntervalUsingAccEnergy" assignedDatapoint="t_val_calc_enrg_accumulated" formula="VAL(t_val_meter_enrg_phsA) VAL(t_val_meter_enrg_phsB) + VAL(t_val_meter_enrg_phsC) +" compFormula="VAL(t_val_meter_enrg_phsA) VAL(t_val_meter_enrg_phsB) + VAL(t_val_meter_enrg_phsC) +" />
<r:aggregation>
<r:aggFunction>SUM</r:aggFunction>
</r:aggregation>
</r:collection>
</rule>
<rule>
<r:collection enabled="true" level_one_interval="5" level_two_interval="15" mode="normalMode" name="CollectionRule_t_val_calc_pwr_consumed">
<r:datapoint programmaticName="t_val_calc_pwr_consumed" />
<r:normal>
<r:currentValue interval="300" />
</r:normal>
<r:accelerated interval="30" />
<r:computation compFormula="VAL(t_val_meter_pwr_phsA) VAL(t_val_meter_pwr_phsB) + VAL(t_val_meter_pwr_phsC) +" formula="VAL(t_val_meter_pwr_phsA) VAL(t_val_meter_pwr_phsB) + VAL(t_val_meter_pwr_phsC) +" formulaType="ConsumedPower" />
</r:collection>
</rule>
<rule>
<r:analysis enabled="false" name="AnalysisRule_t_val_calc_pwr_consumed" source="Engine">
<r:datapoint programmaticName="t_val_calc_pwr_consumed" />
<r:parametricThreshold>
<r:highCritical eventProgrammaticName="t_evt_dp_genericThrshldHighCritical" />
<r:highWarning eventProgrammaticName="t_evt_dp_genericThrshldHighWarning" />
<r:lowWarning eventProgrammaticName="t_evt_dp_genericThrshldLowWarning" />
<r:lowCritical eventProgrammaticName="t_evt_dp_genericThrshldLowCritical" />
</r:parametricThreshold>
</r:analysis>
</rule>
</rules>
</elementDefinitionModel>
的Java代碼..
public class PUE_Checker {
public static void main(String[] args) throws XMLStreamException, ParserConfigurationException, SAXException, IOException{
// TODO code application logic here
Integer count =0;
Integer x =0;
Integer size;
String PUE1;
String model;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document document = db.parse(new File("E:\\SVN\\R3.3\\DataDefinition\\file.xml"));
NodeList nodeList = document.getElementsByTagName("r:datapoint");
for(x=0,size= nodeList.getLength(); x<size; x++) {
model= nodeList.item(x).getParentNode().getParentNode().getAttributes().getNamedItem("modelInSymbol").getNodeValue();
if(model.length() > 0){
PUE1 = nodeList.item(x).getAttributes().getNamedItem("programmaticName").getNodeValue();
if("t_val_calc_pwr_consumed".equals(PUE1) || "t_val_calc_enrg_accumulated".equals(PUE1)){
count++;
}
if(count==2){
System.out.println("Points present in"+nodeList.item(x).getParentNode().getParentNode().getAttributes().getNamedItem("modelInSymbol").getNodeValue());
}
}
}
}
}
預期輸出..
Points present in EM24-DIN_AV9_3_X_IS
電流輸出
Exception in thread "main" java.lang.NullPointerException
at sample.PUE_Checker.main(PUE_Checker.java:37)
Java Result: 1
編輯1:
線被稱爲 「PUE_Checker.java:37」 是
model= nodeList.item(x).getParentNode().getParentNode().getAttributes().getNamedItem("modelInSymbol").getNodeValue();
這行是PUE_Checker.java:37? – vincent 2015-03-31 09:59:43
我已經編輯了相應的問題。 – Lucy 2015-03-31 10:03:29
model = nodeList.item(x).getParentNode()。getParentNode()給出標籤規則no?沒有屬性。這可能是您的nullPointerException的原因。 而你期待elementDefinitionModel標籤正確嗎? – vincent 2015-03-31 10:04:54