我正在使用SAX(Simple API for XML)來解析XML文檔。我的目的是解析文檔,以便我可以將實體從XML中分離出來,並從這些實體創建一個ER圖(我將在獲得文件所有實體後手動創建)。 雖然我在編碼上面討論過的每一件事情都處於初始階段,但我現在只是停留在這個特定的問題上。閱讀XML獲取實體
這裏是我的代碼:
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Parser extends DefaultHandler {
public void getXml() {
try {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxParserFactory.newSAXParser();
final MySet openingTagList = new MySet();
final MySet closingTagList = new MySet();
DefaultHandler defaultHandler = new DefaultHandler() {
public void startDocument() throws SAXException {
System.out.println("Starting Parsing...\n");
}
public void endDocument() throws SAXException {
System.out.print("\n\nDone Parsing!");
}
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (!openingTagList.contains(qName)) {
openingTagList.add(qName);
System.out.print("<" + qName + ">");
}
}
public void characters(char ch[], int start, int length)
throws SAXException {
for (int i = start; i < (start + length); i++) {
System.out.print(ch[i]);
}
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (!closingTagList.contains(qName)) {
closingTagList.add(qName);
System.out.print("</" + qName + ">");
}
}
};
saxParser.parse("student.xml", defaultHandler);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
Parser readXml = new Parser();
readXml.getXml();
}
}
我想要實現是當的startElement方法檢測到標籤已經走過它應該跳過標籤以及所有其他實體的標籤裏面,但我對如何實現該部分感到困惑。
注意:目的是讀取標籤,我不關心它們之間的記錄。 MySet只是一個抽象,它包含像contains這樣的方法(如果該集合具有傳遞的數據)等等。
任何幫助將被撥付。謝謝
確切的問題是什麼?任何輸出?你的套件的內容是什麼? – chris 2015-03-30 19:15:21
set只是一個由我實現的Vector,它包含一些更多的方法,就像檢查Set中是否存在該值一樣。 無論如何,問題是我如何實現功能來跳過所有的內部標籤,當已經遍歷的標籤被發現。 – 2015-03-30 19:21:20
好的。你爲什麼想這樣做?這是一個巨大的文件嗎?我想你想收集標籤名稱 - 這應該已經適用於你的代碼。 – chris 2015-03-30 19:23:53