【发布时间】:2016-05-22 08:36:51
【问题描述】:
在 Google 图像研究之后,我试图在每个 <img> 标记内获取每个图像的 src="path"。
直到现在我可以查看所有HTML代码,然后我需要将所有HTML代码转换为String,最后从转换后的字符串中得到一个“子字符串”,应该是每个图像的图像URL。
我注释掉了代码中不能正常工作的部分。如果您尝试收到此错误:
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-75875`
我不明白为什么会出现此错误。我究竟做错了什么?我尝试了几件事作为“子字符串”中的参数,但任何人都可以正常工作,我们现在的参数是尝试获取标签(IMG)的全部内容。
那么,我怎样才能把所有的路径,然后保存呢?
提前致谢
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList;
import javafx.concurrent.Worker;
import javafx.concurrent.Worker.State;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
HBox hbox = new HBox();
WebView webview = new WebView();
final WebEngine webengine = webview.getEngine();
webengine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
public void changed(ObservableValue ov, State oldState, State newState) {
if (newState == Worker.State.SUCCEEDED) {
Document doc = webengine.getDocument();
try {
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.transform(new DOMSource(doc),
new StreamResult(new OutputStreamWriter(System.out, "UTF-8")));
// StringWriter writer = new StringWriter();
// transformer.transform(new DOMSource(doc),
// new StreamResult((writer)));
// String output = writer.getBuffer().toString().replaceAll("\n|\r", "");
// System.out.println("Outputvale"+output);
// String immagine =output.substring(output.indexOf("<IMG")+1,output.indexOf("/>"));
// System.out.println(immagine);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
});
webengine.load("https://www.google.it/search?q=casa&biw=1440&bih=765&source=lnms&tbm=isch&sa=X&ved=0ahUKEwiI0MvF0O3KAhUCGA8KHZixCzIQ_AUIBygC");
primaryStage.setScene(new Scene(webview, 800, 800));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
【问题讨论】:
-
您已经在使用 Transformer。为什么不给那个 Transformer 一个 XSL 文件,去除除
//img/@src之外的所有内容? -
我不知道该怎么做。从那个“变压器”中获取子字符串真的很难吗?
标签: java html xml string javafx