我正在寻找最好的方法来通知我的类,该类创建 xml 解析器实例有关每行已解析的代码。
我想在从解析器获取每一行之后更新 gui 等,然后再读取下一行等等,实现此目的的最佳方法是什么?让 xmlparser 成为观察者?
Controller.java
public class Controller {
public Controller(){
XMLParser parser = new XMLParser():
parser.parseDocument() //Get value after each loop
}
}
XMLParser.java
public class XMLParser {
String type="", value="";
public void parseDocument() throws Exception{
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
InputStream in = new FileInputStream("gaugeInput.xml");
XMLStreamReader streamReader = inputFactory.createXMLStreamReader(in);
streamReader.nextTag(); // Advance to "gauge_input" element
streamReader.nextTag(); // Advance to "gauge" element
while (streamReader.hasNext()) {
if (streamReader.isStartElement()) {
switch (streamReader.getLocalName()) {
case "type": {
type = streamReader.getElementText();
break;
}
case "value": {
value = streamReader.getElementText();
break;
}
}
}
else if(streamReader.isEndElement()){
System.out.println("Package for controller: type: "+type+" value: "+value);
}
streamReader.next();
}
}
}
最佳答案
您可以将“监听器”传递给 parseDocument
方法。监听器是一个接口(interface),它有一个可以在每个标签之后调用的方法。 Controller
类可以实现监听器来获取通知。
这应该适用于如下所示的代码:
public interface TagListener {
void onTagRead(<parameters>);
}
public class Controller implements TagListener {
public Controller(){
XMLParser parser = new XMLParser():
parser.parseDocument(this) // pass the controller instance to get notified
}
public void onTagRead(<parameter>) {
// your logic :)
}
}
public class XMLParser {
String type="", value="";
public void parseDocument(TagListener listener) throws Exception{
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
InputStream in = new FileInputStream("gaugeInput.xml");
XMLStreamReader streamReader = inputFactory.createXMLStreamReader(in);
streamReader.nextTag(); // Advance to "gauge_input" element
streamReader.nextTag(); // Advance to "gauge" element
while (streamReader.hasNext()) {
if (streamReader.isStartElement()) {
switch (streamReader.getLocalName()) {
case "type": {
type = streamReader.getElementText();
break;
}
case "value": {
value = streamReader.getElementText();
break;
}
}
}
else if(streamReader.isEndElement()){
listener.onTagRead(...);
}
streamReader.next();
}
}
}
关于java - 解析 xml 并在每个节点通知调用方法的类之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42746921/