Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Stax搜索XML文件中的字符串_Java_Xml_Xsd_String Parsing_Stax - Fatal编程技术网

Java 使用Stax搜索XML文件中的字符串

Java 使用Stax搜索XML文件中的字符串,java,xml,xsd,string-parsing,stax,Java,Xml,Xsd,String Parsing,Stax,我正在使用stsx搜索字符串t_val_calc_pwr_consumered&t_val_calc_enrg_,该字符串在xml文件的规则标记下的xsd部分中累积。当我尝试在每个ElementDefinitionModel标记的rules部分中搜索时,我得到一个空指针异常 XML文件 <elementDefinitionModel manufacturerInSymbol="CARLO GAVAZZI" minSupportedVersionInSymbol="1.4" modelIn

我正在使用stsx搜索字符串t_val_calc_pwr_consumered&t_val_calc_enrg_,该字符串在xml文件的规则标记下的xsd部分中累积。当我尝试在每个ElementDefinitionModel标记的rules部分中搜索时,我得到一个空指针异常

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>
电流输出

     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();

问题是您试图在规则标记中找到属性modelInSymbol。这会导致NullPointerException。 您可以通过两个步骤完成此操作: -在根标记元素中搜索属性modelInSymbol -在r:datapoint中搜索属性programmaticName,并重用前面搜索的结果

通过这种方式,您可以为每个r:datapoint搜索modelInSymbol。但只有一个。 所以,第一次使用它,每次需要时都重复使用它

我在一个文本编辑器中这样做了,所以它可能不起作用,但可能是一个提示:

Element rootElement = xmlDocument.getDocumentElement();
String modelInSymbol = rootElement.getAttribute("modelInSymbol");

NodeList nodeList = document.getElementsByTagName("r:datapoint");
for(x=0,size= nodeList.getLength(); x<size; x++) {
    if(modelInSymbol!= null && modelInSymbol.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"+modelInSymbol);
       }
    }
}     

哪一行是PUE_Checker.java:37?我已经相应地编辑了我的问题..model=nodeList.itemx.getParentNode.getParentNode是否给出标记规则no?它没有属性。这可能是你的nullPointerException的原因。您期望elementDefinitionModel标记,对吗?通过使用第37行,我希望获得elementDefinitionModel标记的modelInSymbol属性的值。您知道如何获得它吗?modelInSymbol似乎是根元素的一个属性。所以我不明白为什么要搜索标记名r:datapoint。好的。。如果elementDefinitionModel标记有父节点,那么当我使用行节点modelInSymbol1=rootElement.getFirstChild时,我们会在上述代码中使用方法getFirstChild吗;在上面的代码中,我得到了输出[text:]。。如何删除?当然是因为您试图打印整个节点元素,而不是他的值。即使将上面的行更改为String modelInSymbol1=rootElement.getFirstChild.getNodeValue,也不要犹豫查看javadoc;我得到的是空白值…为什么?因为如果rootElement是elementDefinitionModel,那么第一个子元素是rules,is没有值。调试器可以帮助您很多。
 model= nodeList.item(x).getParentNode().getParentNode().getAttributes().getNamedItem("modelInSymbol").getNodeValue();
Element rootElement = xmlDocument.getDocumentElement();
String modelInSymbol = rootElement.getAttribute("modelInSymbol");

NodeList nodeList = document.getElementsByTagName("r:datapoint");
for(x=0,size= nodeList.getLength(); x<size; x++) {
    if(modelInSymbol!= null && modelInSymbol.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"+modelInSymbol);
       }
    }
}