예제 코드를 사용하여 SAX를 사용하여 시스템에 저장된 로컬 XML 파일을 구문 분석하는 방법을 알려주는 사람이 있습니까? 그 정보를 어디에서 찾을 수 있는지 말해주십시오.Android에서 Sax를 사용하여 로컬 XML 파일 구문 분석
11
A
답변
19
응용 프로그램에서 XML을 읽으려면 "xml"(소문자)이라는 프로젝트 내의 res 폴더에 폴더를 만듭니다. 이 새로 만든 폴더에 XML을 저장하십시오. , 자원에서 XML을로드하려면
XmlResourceParser myxml = mContext.getResources().getXml(R.xml.MyXml);//MyXml.xml is name of our xml in newly created xml folder, mContext is the current context
// Alternatively use: XmlResourceParser myxml = getContext().getResources().getXml(R.xml.MyXml);
myxml.next();//Get next parse event
int eventType = myxml.getEventType(); //Get current xml event i.e., START_DOCUMENT etc.
그런 다음 노드를 처리하기 위해 시작할 수 있습니다
는, 속성 등 텍스트 이벤트 유형, 한 번에 처리 통화 myxml.next을 (케이싱에 의해 포함) 다음 이벤트를 얻기 위해, 즉, ,
String NodeValue;
while (eventType != XmlPullParser.END_DOCUMENT) //Keep going until end of xml document
{
if(eventType == XmlPullParser.START_DOCUMENT)
{
//Start of XML, can check this with myxml.getName() in Log, see if your xml has read successfully
}
else if(eventType == XmlPullParser.START_TAG)
{
NodeValue = myxml.getName();//Start of a Node
if (NodeValue.equalsIgnoreCase("FirstNodeNameType"))
{
// use myxml.getAttributeValue(x); where x is the number
// of the attribute whose data you want to use for this node
}
if (NodeValue.equalsIgnoreCase("SecondNodeNameType"))
{
// use myxml.getAttributeValue(x); where x is the number
// of the attribute whose data you want to use for this node
}
//etc for each node name
}
else if(eventType == XmlPullParser.END_TAG)
{
//End of document
}
else if(eventType == XmlPullParser.TEXT)
{
//Any XML text
}
eventType = myxml.next(); //Get next event from xml parser
}
6
package com.xml; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import android.util.Log; import android.widget.Toast; public class FeedHandler extends DefaultHandler { StringBuilder sb = null; String ret = ""; boolean bStore = false; int howMany = 0; FeedHandler() { } String getResults() { return "XML parsed data.\nThere are [" + howMany + "] status updates\n\n" + ret; } @Override public void startDocument() throws SAXException { // initialize "list" } @Override public void endDocument() throws SAXException { } @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { try { if (localName.equals("status")) { this.sb = new StringBuilder(""); bStore = true; } if (localName.equals("user")) { bStore = false; } if (localName.equals("text")) { this.sb = new StringBuilder(""); Log.i("sb ", sb+""); } if (localName.equals("created_at")) { this.sb = new StringBuilder(""); } } catch (Exception e) { Log.d("error in startElement", e.getStackTrace().toString()); } } @Override public void endElement(String namespaceURI, String localName, String qName) throws SAXException { if (bStore) { if (localName.equals("created_at")) { ret += "Date: " + sb.toString() + "\n"; sb = new StringBuilder(""); return; } if (localName.equals("user")) { bStore = true; } if (localName.equals("text")) { ret += "Post: " + sb.toString() + "\n\n"; sb = new StringBuilder(""); return; } } if (localName.equals("status")) { howMany++; bStore = false; } } @Override public void characters(char ch[], int start, int length) { if (bStore) { // System.out.println("start " +start+"length "+length); String theString = new String(ch, start, length); this.sb.append(theString+"start "+start+" length "+length); } } }
InputSource is = new InputSource(getResources().openRawResource(R.raw.my)); System.out.println("running xml file..... "); // create the factory SAXParserFactory factory = SAXParserFactory.newInstance(); // create a parser SAXParser parser = factory.newSAXParser(); // create the reader (scanner) XMLReader xmlreader = parser.getXMLReader(); // instantiate our handler FeedHandler fh = new FeedHandler(); // assign our handler xmlreader.setContentHandler(fh); // perform the synchronous parse xmlreader.parse(is); // should be done... let's display our results tvData.setText(fh.getResults());
1
샘플 코드
문서 만들기 BuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- 는 DocumentBuilder를
DocumentBuilder를 빌더 = 공장을 만듭니다. newDocumentBuilder();
- 입력 스트림 클래스 로더 CLS 얻을 DomReader.class.getClassLoader =(); InputStream is = cls.getResourceAsStream ("xml file");
- parse xml 파일을 가져 와서 DocumentBuilder 개체의 구문 분석 메서드 을 호출하여 Document 개체를 가져옵니다. 문서 document = builder.parse (is);
- 문서 객체를 사용한 트래버스 dom 트리. SAX : 간단한 xml 구문 분석. 노드별로 노드를 구문 분석합니다. 위쪽에서 아래쪽으로 이동합니다. 메모리 사용량이 적습니다. 색소폰으로는 이전 탐색이 불가능합니다. ; 필요한 핸들러에게 공용 클래스 SaxParse를 구현
//는 SAXParserFactory와의 의 SAXParserFactory 공장 = SAXParserFactory.newInstance()의 DefaultHandler { } // 새로운 인스턴스를 확장 // SAX PARSER의 새로운 인스턴스 SAXParser saxparser = factory.newSAXParser(); // XML 문서 구문 분석 SAXParser.parse (새 파일 (구문 분석 할 파일), 새 SAXXMLParserImpl());