Verwenden Sie zur Veranschaulichung ein Beispiel wie dieses http://video.sina.com.cn/v/b/75314002-1648211320.html.
Öffnen Sie es mit Firefox, aktivieren Sie Firebug und erhalten Sie die folgenden Informationen.
was in dieser Anfrage
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
Die Antwort, die wir erhalten, enthält die gewünschten XML-Informationen, von denen vid der rote Teil oben ist, und alles nach uid kann ignoriert werden. Wir geben direkt http://v.iask.com/v_play.php?vid=75314002 ein Browser Sie können immer noch die gleichen Informationen erhalten. Seitdem ist die Idee des Parsens klar geworden. Extrahieren Sie das Video aus dem Videolink, verwenden Sie http://v.iask.com/v_play.php?vid=, um die XML-Datei abzurufen, und analysieren Sie die XML-Datei Holen Sie sich die echte Videoadresse.
Das Folgende ist der Code zum Parsen von XML, wobei Sax zum Parsen von XML verwendet wird. Definieren Sie zunächst den XML-Reader.
Kopieren Sie den Codecode wie folgt:
Paket hdu.fang.parser;
hdu.fang.model.Video importieren;
import java.util.ArrayList;
java.util.List importieren;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
öffentliche Klasse XMLSaxReader erweitert DefaultHandler {
private List<Video> videos = null;
privates Video video = null;
private Long timeLength = null;
privates String-Tag = null;
@Override
public void startDocument() löst SAXException {
videos = new ArrayList<Video>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attribute (Attribute) löst SAXException {
if ("durl".equals(qName)) {
video = neues Video();
}
tag = qName;
}
@Override
public void endElement(String uri, String localName, String qName)
wirft SAXException {
if ("durl".equals(qName)) {
videos.add(video);
Video = null;
}
tag = null;
}
@Override
öffentliche Leerzeichen (char[] ch, int start, int length)
wirft SAXException {
if (tag != null) {
String data = new String(ch, start, length);
if ("timelength".equals(tag)) {
timeLength = Long.valueOf(data);
} else if ("order".equals(tag)) {
video.setOrder(Integer.valueOf(data));
} else if ("url".equals(tag)) {
video.setUrl(data);
} else if ("length".equals(tag)) {
video.setLength(Integer.valueOf(data));
}
}
}
public List<Video> getVideos() {
Videos zurückgeben;
}
public long getLength() {
return timeLength;
}
}
Die Videoklasse ist ein von mir definiertes Datenmodell. In der Hauptfunktion müssen wir nur die Sax-Factory aufrufen, um den Parser zu instanziieren.
Kopieren Sie den Codecode wie folgt:
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
XMLSaxReader-Reader = new XMLSaxReader();
InputStream in_withcode = new ByteArrayInputStream(
xml.getBytes("UTF-8"));//xml ist die gerade erhaltene XML-Datei, Typ String
sp.parse(in_withcode, Reader);
videos=reader.getVideos();//Videoliste abrufen
timeLength=reader.getLength();//Erhalten Sie die Videolänge
System.out.println(videos);
Die XML-Datei enthält viele weitere Informationen, die je nach Bedarf analysiert werden können.