簡體   English   中英

如何忽略XML SAX PARSING中的相似標簽

[英]How to ignore similar tag in XML SAX PARSING

我有這樣的XML

<OuterTag>
       <Name>JAVA
      </Name>
<InnerTag>
     <Name> PHP
    </Name>
</InnerTag>

</OuterTag>

我只想要包含“ Java”的值。 但是當我解析時,它也會帶來“ PHP”,因為本地名稱是相同的。 是否可以過濾多個LocalName並選擇所需的LocalName? 我怎樣才能做到這一點?

想法是保存您所處的狀態,僅使用布爾值,如果找到“ OuterTag”的打開標簽,則將其設置為true,而當找到“ InnerTag”的打開標簽時,將其設置為false。

這樣,當您找到“名稱”標簽時,您現在就在其中。

另一種更靈活的方法是在找到標簽名稱時將其推送/彈出。 這樣,您可以在找到“名稱”標簽后檢查誰是您的父標簽,然后獲取正確的值。

如果我理解正確性,則需要在OuterTag下使用Name標簽,而不要在InnerTag下使用Name標簽。 因此,這就是我使用dom4j的方式

    SAXReader saxReader = new SAXReader();
    saxReader.addHandler("OuterTag/Name", new ElementHandler() {

        @Override
        public void onStart(ElementPath arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onEnd(ElementPath arg0) {
            // TODO Auto-generated method stub

        }
    });

    File inputFile = new File(filename);
    saxReader.read(inputFile);

我希望這有幫助。

薩克斯解析器通常具有掛鈎,您可以在其中編寫代碼,特別是StartElementEndElementcharacters

莫斯有正確的答案-

StartElement :將元素名稱壓入堆棧。

字符 :如果元素名稱為“ name”,並且堆棧上具有“ OuterTag”元素,那么您找到了值。 否則,請忽略它。

EndElement將元素彈出堆棧。


請注意,SAX解析器功能非常強大,但有時會顯得過大。 速度非常快,非常適合解析格式錯誤的xml或非常大的XML文件,在解析器遇到元素時對它們做出反應。

我會仔細建議“考慮”一個XPath解決方案,它可以為您完成解析工作,使您可以輕松引用任何元素。 創建一個Xpath對象,並使用'/OuterTag/Name[1]'查詢'/OuterTag/Name[1]'如果您以前使用過jQuery,那么就可以在家了。

但是,如果您的XML格式錯誤或實際上又大又復雜,這可能會很慢。 您已被警告。

只是知道XPath是可能的解決方案。 http://www.javabeat.net/tips/182-how-to-query-xml-using-xpath.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM