是否可以在SAX解析器中提供路徑表達式?我有一個XML文件,它具有幾個相同的名稱標籤,但它們位於不同的元素中。有什麼辦法可以區分它們嗎? 這裏是XML:使用SAX解析器,你如何解析具有相同名稱標籤但在不同元素中的xml文件?
<Schools>
<School>
<ID>335823</ID>
<Name>Fairfax High School</Name>
<Student>
<ID>4195653</ID>
<Name>Will Turner</Name>
</Student>
<Student>
<ID>4195654</ID>
<Name>Bruce Paltrow</Name>
</Student>
<Student>
<ID>4195655</ID>
<Name>Santosh Gowswami</Name>
</Student>
</School>
<School>
<ID>335824</ID>
<Name>FallsChurch High School</Name>
<Student>
<ID>4153</ID>
<Name>John Singer</Name>
</Student>
<Student>
<ID>4154</ID>
<Name>Shane Warne</Name>
</Student>
<Student>
<ID>4155</ID>
<Name>Eddie Diaz</Name>
</Student>
</School>
</Schools>
我想從一所學校的名稱和ID的學生的姓名和ID來區分。
感謝您的答覆:
我創建了具有以下fields-學校ID,school_name,student_id數據併爲他們student_name和getter和setter方法學生POJO。這是我的臨時解析器實現。當我解析XML時,我需要將學校名稱,ID,學生姓名,ID的值放在pojo中並將其返回。你能告訴我如何實現差異化堆棧嗎?這是我的語法分析器框架::
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class HandleXML extends DefaultHandler {
private student info;
private boolean school_id = false;
private boolean school_name = false;
private boolean student_id = false;
private boolean student_name = false;
private boolean student = false;
private boolean school = false;
public HandleXML(student record) {
super();
this.info = record;
school_id = false;
school_name = false;
student_id = false;
student_name = false;
student = false;
school = false;
}
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("student")) {
student = true;
}
if (qName.equalsIgnoreCase("school")) {
school_id = true;
}
if (qName.equalsIgnoreCase("school_id")) {
school_id = true;
}
if (qName.equalsIgnoreCase("student_id")) {
student_id = true;
}
if (qName.equalsIgnoreCase("school_name")) {
school_name = true;
}
if (qName.equalsIgnoreCase("student_name")) {
student_name = true;
}
}
@Override
public void endElement(String uri, String localName,
String qName)
throws SAXException {
}
@Override
public void characters(char ch[], int start, int length)
throws SAXException {
String data = new String(ch, start, length);
}
}
工作還檢查了:http://stackoverflow.com/questions/1863250/ - 有一些項目,讓您使用XPath的一個子集流文件。如果您可以將您的問題納入該子集,則所得到的代碼將遠遠優於任何手動SAX處理程序代碼。 –
帶上下文的SAX解析就像一個狀態機:https://en.wikipedia.org/wiki/Finite-state_machine,你需要有一些標誌,你可以打開/關閉,知道你在哪裏,但它可以很快變得非常混亂,在你走得太遠之前你應該考慮其他選擇。 –