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”元素属性( label1
和label2
),但我的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
实现?