استخدم مثالاً للتوضيح، مثل http://video.sina.com.cn/v/b/75314002-1648211320.html.
افتحه باستخدام Firefox، وقم بتمكين firebug، واحصل على المعلومات التالية.
الذي في هذا الطلب
http://v.iask.com/v_play.php?vid=75314002&uid=1648211320&pid=478&tid=&plid=4001&prid=ja_7_3485822616&referrer=&ran=0.2936802236363292&r=video.sina.com.cn
يحتوي الرد الذي نحصل عليه على معلومات xml التي نريدها، والتي يمثل vid الجزء الأحمر أعلاه، ويمكن تجاهل كل شيء بعد uid، وندخل مباشرة إلى http://v.iask.com/v_play.php?vid=75314002 في ملف. المتصفح لا يزال بإمكانك الحصول على نفس المعلومات. ومنذ ذلك الحين، أصبحت فكرة التحليل واضحة. استخرج الفيديو من رابط الفيديو، واستخدم http://v.iask.com/v_play.php?vid= للحصول على ملف xml، وقم بتحليل ملف xml إلى الحصول على عنوان الفيديو الحقيقي.
ما يلي هو رمز تحليل XML، وذلك باستخدام Sax لتحليل XML. أولاً قم بتعريف قارئ XML.
انسخ رمز الكود كما يلي:
الحزمة hdu.fang.parser;
import hdu.fang.model.Video;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
الطبقة العامة XMLSaxReader تمتد DefaultHandler {
قائمة مقاطع الفيديو الخاصة <Video> = فارغة؛
فيديو فيديو خاص = فارغ؛
الخاص Long timeLength = null;
علامة سلسلة خاصة = فارغة؛
@تجاوز
public void startDocument() يلقي SAXException {
videos = new ArrayList<Video>();
}
@تجاوز
startElement باطلة عامة (سلسلة uri، String localName، String qName،
سمات السمات) يطرح SAXException {
إذا ("دورل". يساوي (qName)) {
فيديو = فيديو جديد ()؛
}
العلامة = qName؛
}
@تجاوز
endElement الفراغ العام (سلسلة uri، سلسلة localName، سلسلة qName)
يرمي SAXException {
إذا ("دورل". يساوي (qName)) {
videos.add(video);
فيديو = فارغ؛
}
العلامة = فارغة؛
}
@تجاوز
أحرف باطلة عامة (char [] ch، int start، int length)
يرمي SAXException {
إذا (العلامة != فارغة) {
بيانات السلسلة = سلسلة جديدة (ch، start، length)؛
إذا ("الطول الزمني". يساوي (العلامة)) {
timeLength = Long.valueOf(data);
} وإلا إذا ("الطلب". يساوي (العلامة)) {
video.setOrder(Integer.valueOf(data));
} else if ("url".equals(tag)) {
video.setUrl(data);
} وإلا إذا ("الطول". يساوي (العلامة)) {
video.setLength(Integer.valueOf(data));
}
}
}
القائمة العامة<Video> getVideos() {
إرجاع مقاطع الفيديو؛
}
getLength العامة الطويلة () {
طول وقت العودة؛
}
}
فئة الفيديو هي نموذج بيانات تم تحديده بنفسي. في الوظيفة الرئيسية، نحتاج فقط إلى الاتصال بمصنع الساكس لإنشاء مثيل للمحلل اللغوي.
انسخ رمز الكود كما يلي:
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
قارئ XMLSaxReader = XMLSaxReader() الجديد;
InputStream in_withcode = new ByteArrayInputStream(
xml.getBytes("UTF-8"));//xml هو ملف xml الذي تم الحصول عليه للتو، اكتب String
sp.parse(in_withcode, Reader);
videos=reader.getVideos();//احصل على قائمة الفيديو
timeLength=reader.getLength();// احصل على طول الفيديو
System.out.println(videos);
هناك الكثير من المعلومات الأخرى في ملف xml، والتي يمكن تحليلها وفقًا لاحتياجاتك.