[英]How to skip the parent tag, based on the value of a child tag in XML Parsing using SAX Parser
[英]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);
我希望這有幫助。
薩克斯解析器通常具有掛鈎,您可以在其中編寫代碼,特別是StartElement
, EndElement
和characters
。
莫斯有正確的答案-
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.