使用Stax在XML文件中搜索特定字符串

时间:2015-03-23 11:07:21

标签: java xml xml-parsing string-parsing stax

我正在尝试检查XML文件中是否存在特定的2个字符串。

xml代码

<datapoint nature="PARAMETRIC" division="COLL_COMP_ENG" programmaticName="t_val_calc_enrg_accumulated" />
<datapoint nature="PARAMETRIC" division="COLL_COMP_ENG" programmaticName="t_val_calc_pwr_consumed" />

Java代码..

    Integer count=0;
    XMLInputFactory f = XMLInputFactory.newInstance();
     XMLStreamReader rdr = f.createXMLStreamReader(new FileReader("E:\\SVN\\MasterData\\MasterData.xml"));

      while (rdr.hasNext()) {
      if (rdr.next() == XMLStreamConstants.START_ELEMENT) {
      if (rdr.getLocalName().equals("datapoint")) {
           String txt = rdr.getAttributeValue("programmaticName");
            if (txt.indexOf("t_val_calc_pwr_consumed") > 0 || txt.indexOf("t_val_calc_enrg_accumulated") > 0) {
              System.out.println(txt);
              count++;
            }
       }
  }
  }
System.out.println(count);

每当我尝试运行代码时,我都会收到错误消息“String无法转换为int”。

  String txt = rdr.getAttributeValue("programmaticName");  

堆栈跟踪是

     Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: javax.xml.stream.XMLStreamReader.getAttributeValue
at sample.eXTRACT.main(eXTRACT.java:42)
     Java Result: 1
     BUILD SUCCESSFUL (total time: 2 seconds)

预期产出:

   t_val_calc_enrg_accumulated
   t_val_calc_pwr_consumed

1 个答案:

答案 0 :(得分:1)

XMLStreamReader#getAttributeValueint作为参数的索引(例如,在这种情况下,rdr.getAttributeValue(2))。

您使用单个String对其进行参数化,这将无法编译。

除基于int的属性订单索引外,您还可以使用重载:getAttributeValue(String namespaceURI, String localName)

API here