Witam,
Mam problem z javą. Próbuje zapisać stronę www do własnego pliku XML. Elementy strony wyświetlają mi się w konsoli lecz nie potrafię ich zapisać. Nie wiem jak napisać w klasie main aby odwołać się do klasy TagReplacer i jej funkcji handleText. Rozumiem że jest to banalne ale początki zawsze są ciężkie... Bardzo prosiłbym o pomoc.
Pozdrawiam
Kod główny main
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URL;
import java.io.File;
import javax.xml.parsers.*;
import org.jdom.Attribute;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.swing.text.html.HTMLEditorKit;
public class main {
public static void main(String[] args) {
ParserGetter kit = new ParserGetter();
HTMLEditorKit.Parser parser = kit.getParser();
try {
URL u = new URL("http://onet.pl");
DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = bf.newDocumentBuilder();
Document myDoc = builder.newDocument();
Element myTitle = myDoc.createElement("title");
myDoc.appendChild(myTitle);
HTMLEditorKit.ParserCallback callback = new TagReplacer(myDoc);
InputStream in = new BufferedInputStream(u.openStream());
InputStreamReader r = new InputStreamReader(in);
parser.parse(r, callback, true);
Text myText = myDoc.createTextNode("Nazwa tytułu:");
myTitle.appendChild(myText);
Source source = new DOMSource(myDoc);
Result result = new StreamResult(new File("test.xml"));
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(source, result);
}
catch (MalformedURLException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
catch (ParserConfigurationException e) {
e.printStackTrace();
}
catch (TransformerConfigurationException e) {
e.printStackTrace();
}
catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
}
catch (TransformerException e) {
e.printStackTrace();
}
}
}
Klasa ParserGetter
import javax.swing.text.html.*;
public class ParserGetter extends HTMLEditorKit
{
public HTMLEditorKit.Parser getParser( )
{
return super.getParser( );
}
}
Klasa TagReplacer
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
import java.io.*;
import java.net.*;
import java.util.*;
public class TagReplacer extends HTMLEditorKit.ParserCallback {
boolean czytamTytul = false;
boolean czytamLink = false;
public TagReplacer() {
}
public void handleText(char[] text, int position) {
if(czytamLink == true){
System.out.println("Odsyłacz: "+ String.valueOf(text));
}
if(czytamTytul == true){
System.out.println("Tytuł: "+ String.valueOf(text));
Text myText = myDoc.createTextNode("Nazwa tytułu:");
}
}
public void handleStartTag(HTML.Tag tag, MutableAttributeSet attributes, int position)
{
if(tag == HTML.Tag.A)
{
czytamLink = true;
Enumeration e = attributes.getAttributeNames( );
while (e.hasMoreElements( ))
{
Object name = e.nextElement( );
String value = (String) attributes.getAttribute(name);
if(name==HTML.Attribute.HREF){
System.out.println("HREF = " + value);
}
}
}
if(tag == HTML.Tag.TITLE)
{
czytamTytul = true;
Enumeration e = attributes.getAttributeNames( );
while (e.hasMoreElements( ))
{
Object name = e.nextElement( );
String value = (String) attributes.getAttribute(name);
if(name==HTML.Attribute.TITLE){
System.out.println("TITLE = " + value);
}
}
}
}
public void handleEndTag(HTML.Tag tag, int position)
{
if(tag == HTML.Tag.A)
{
czytamLink = false;
}
if(tag == HTML.Tag.TITLE)
{
czytamTytul = false;
}
}
}