Java使用SAX处理XML

我有需要用给定结构解析的XML:

   Text   Text   

我使用SAX解析器来解析它:

 RootElement root=new RootElement("root"); android.sax.Element page_info=root.getChild("tag").getChild("child"); page_info.setStartElementListener(new StartElementListener() { @Override public void start(Attributes attributes) { /*---------------*/ } }); 

我想读取第二个“tag”元素属性( label1label2 ),但我的StartElementListener读取第一个标记,因为它们具有相同的结构和属性(那些label="idAd"label="idNumPage" )来区分它们。 如何告诉StartElementListener只处理第二个元素?

如果你坚持使用StartElementListener -way,你应该为tag元素设置一个监听器,当它的label等于“idNumPage”时设置一个标志,所以你应该读取你在child元素上设置的另一个StartElementListener

更新
以下是如何使用这些侦听器执行此操作的示例:

 android.sax.Element tag = root.getChild("tag"); final StartTagElementListener listener = new StartTagElementListener(); tag.setStartElementListener(listener); android.sax.Element page_info = tag.getChild("child"); page_info.setStartElementListener(new StartElementListener() { @Override public void start(Attributes attributes) { if (listener.readNow()) { //TODO: you are in the tag with label="idNumPage" } } }); 

并使用额外的readNow getter实现readNow ,让我们知道何时读取child标记的属性:

 public final class StartTagElementListener implements StartElementListener { private boolean doReadNow = false; @Override public void start(Attributes attributes) { doReadNow = attributes.getValue("label").equals("idNumPage"); } public boolean readNow() { return doReadNow; } } 

PS :您是否考虑过为此任务使用org.xml.sax.helpers.DefaultHandler实现?