使用sax解析器java从特定重复标记获取值的XML

使用sax解析器java从特定重复标记获取值的XML,java,xml,xml-parsing,desktop-application,Java,Xml,Xml Parsing,Desktop Application,我正在尝试使用sax解析器在xml中获取一些信息 这是: <IDENT>show</IDENT> <FORMAL_PARAM_LIST> FORMAL_PARAM_LIST </FORMAL_PARAM_LIST> <BLOCK_SCOPE> BLOCK_SCOPE <VAR_DECLARATION>

我正在尝试使用sax解析器在xml中获取一些信息

这是:

<IDENT>show</IDENT>
        <FORMAL_PARAM_LIST>
        FORMAL_PARAM_LIST
        </FORMAL_PARAM_LIST>
        <BLOCK_SCOPE>
        BLOCK_SCOPE
           <VAR_DECLARATION>
           VAR_DECLARATION
              <LOCAL_MODIFIER_LIST>
              LOCAL_MODIFIER_LIST
              </LOCAL_MODIFIER_LIST>
              <TYPE>
              TYPE
                 <QUALIFIED_TYPE_IDENT>
                 QUALIFIED_TYPE_IDENT
                    <IDENT>MenuUI</IDENT>
                 </QUALIFIED_TYPE_IDENT>
              </TYPE>
              <VAR_DECLARATOR_LIST>
              VAR_DECLARATOR_LIST
                 <VAR_DECLARATOR>
                 VAR_DECLARATOR
                    <IDENT>menu</IDENT>
                    <EXPR>
                    EXPR
                       <CLASS_CONSTRUCTOR_CALL>
                       STATIC_ARRAY_CREATOR
                          <QUALIFIED_TYPE_IDENT>
                          QUALIFIED_TYPE_IDENT
                             <IDENT>MenuUI</IDENT>
                          </QUALIFIED_TYPE_IDENT>
                          <ARGUMENT_LIST>
                          ARGUMENT_LIST
                          </ARGUMENT_LIST>
                       </CLASS_CONSTRUCTOR_CALL>
                    </EXPR>
                 </VAR_DECLARATOR>
              </VAR_DECLARATOR_LIST>
           </VAR_DECLARATION>
           <EXPR>
           EXPR
              <METHOD_CALL>
              METHOD_CALL
                 <DOT>.<IDENT>menu</IDENT><IDENT>showJASPform</IDENT></DOT>
                 <ARGUMENT_LIST>
                 ARGUMENT_LIST
                 </ARGUMENT_LIST>
              </METHOD_CALL>
           </EXPR>
        </BLOCK_SCOPE>
show
正式参数列表
块镜
VAR_声明
本地修改器列表
类型
合格类型标识
梅努伊
变量声明器列表
变量声明器
菜单
EXPR
静态数组创建器
合格类型标识
梅努伊
参数列表
EXPR
方法调用
.menushowJASPform
参数列表
基本上,我想获取ident标记(),在xml中有4个ident,但问题是我不想全部获取,我只想获取第一个ident(show ident),我已经在尝试通过实现布尔值来标记我们在xml元素中的位置来解决它,但是我搞不清楚如何才能在第一个ident处停止


非常感谢您的关注

使用从
org.xml.sax.helpers.DefaultHandler
派生的类。在
startElement()
方法中找到所需元素后,立即抛出
SAXException
。这将立即停止SAX解析器


下面是提供的示例-

使用从
org.xml.sax.helpers.DefaultHandler
派生的类。在
startElement()
方法中找到所需元素后,立即抛出
SAXException
。这将立即停止SAX解析器


这里提供了一个示例-

很抱歉发布得太晚,对于那些想弄明白这一点的人来说,除了使用dmitry trifonov先生的方法外,你们还可以在sax中使用Stack方法,你们可以在这里找到sax的Stack方法文章:


希望有帮助

很抱歉发布得太晚,对于那些想弄明白这一点的人来说,除了使用dmitry trifonov先生的方法外,你们还可以在sax中使用Stack方法,你们可以在这里找到sax的Stack方法文章:


希望有帮助

正如您已经提到的,您正在使用一个标志,在if循环中进行如下检查:
if(identag.equalsIgnoreCase(“Ident”)&&Boolean.FALSE.equals(yourfagname)){…}
。最初将您的标志设置为false,在第一次遇到Ident标记后,将其设置为true,这样下次不会考虑Ident标记。感谢您响应我的询问线程,我已经尝试了我的方法,它是
if(qName.equalsIgnoreCase(“Ident”)){identFlag=true;}
(在start元素中)然后
if(qName.equalsIgnoreCase(“IDENT”){identFlag=false;}
(在endelement中)输出是4个标识,我需要更多的标志来明确第一个标识,还是我的方法有问题?非常感谢您的时间,我想您错过了我在if循环中提到的&&条件,请仔细观察。基本的想法是在解析第一次出现的后将标志设置为true,这样可以n下次出现时,该标志将拒绝其访问循环内部。我希望这会有所帮助,谢谢:)@robot\u alien不幸的是,您的解决方案不会阻止SAX解析器解析文件的其余部分。一旦满足筛选目标,就停止解析非常重要,特别是在您对大文件进行分页时。您是否对基于xpath的文件感兴趣解决方案?正如您已经提到的,您正在使用一个标志,在if循环中进行如下检查:
if(identag.equalsIgnoreCase(“Ident”)&&Boolean.FALSE.equals(yourfagname)){…}
。首先将您的标志设置为false,在第一次遇到Ident tag后,将其设置为true,这样下次不会考虑Ident tag。感谢您响应我的询问线程,我已经尝试了我的方法,它是
if(qName.equalsIgnoreCase(“Ident”)){identFlag=true;}
(在start元素中)然后
if(qName.equalsIgnoreCase(“IDENT”){identFlag=false;}
(在endelement中)输出是4个标识,我需要更多的标志来明确第一个标识,还是我的方法有问题?非常感谢您的时间,我想您错过了我在if循环中提到的&&条件,请仔细观察。基本的想法是在解析第一次出现的后将标志设置为true,这样可以n下次出现时,该标志将拒绝其访问循环内部。我希望这会有所帮助,谢谢:)@robot\u alien不幸的是,您的解决方案不会阻止SAX解析器解析文件的其余部分。一旦满足筛选目标,就停止解析非常重要,特别是在您对大文件进行分页时。您是否对基于xpath的文件感兴趣解决方案?非常感谢您的回复,如果我使用这个aproach(throwin-saxException),这意味着我无法正确获取xml中的更多信息?如果我必须使用其他标记(例如type标记)我需要创建另一个saxparser吗?您可以创建上下文对象,它将处理解析事件并决定是否满足解析终止的条件。哇,这消除了我的困惑!非常感谢您清除了这个问题!非常感谢您的回复,如果我使用t