我使用Watcher API编写了一个Java程序,它检查文件夹,无论何时创建文件,它都会在html标记中添加一个特定值。
这是我的WATCHER API Java类:
package com.searchtechnologies;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.List;
public class WatcherAPI {
public static void main(String args[]) {
Path myDir = Paths.get("C:/Apps/CollectionOfXMLFiles");
try {
WatchService watcher = myDir.getFileSystem().newWatchService();
myDir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE);
WatchKey watckKey = watcher.take();
List<WatchEvent<?>> events = watckKey.pollEvents();
for (WatchEvent event : events) {
if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
String fileName = "" + event.context();
HtmlParser htmlParser = new HtmlParser();
htmlParser.HTMLtag(fileName);
}
}
}
catch (Exception e) {
System.out.println("Error: " + e.toString());
}
}
}
这是我的HTMLParser.java
public void HTMLtag(String fileName) throws IOException {
File file = new File("firstpage.html");
Document doc = Jsoup.parse(file, "UTF-8");
fileName = fileName.substring(0, fileName.length() - 4);
String collection = fileName;
doc.select("select").first().children().first()
.before("<option value=" + collection + ">" + collection + "</option");
PrintWriter writer = new PrintWriter("firstpage.html");
writer.write(doc.toString());
writer.close();
}
它在此标记中追加文件名:
<td valign="middle"><select name="site">
<option value="collection">collection</option>
假设我的文件名是default_collection.xml,我的java程序提取xml文件的名称default_collection并将其添加到我的html文件中:
<td valign="middle"><select name="site">
<option value="default_collection">default_collection</option>
但是我的java程序没有添加一次,而是添加了两次:
<td valign="middle"><select name="site">
<option value="default_collection">default_collection</option>
<option value="default_collection">default_collection</option>
我不确定问题是什么。任何帮助将不胜感激。
答案 0 :(得分:2)
您应该使用prepend
代替,在您的情况下更合适
将提供的HTML添加到每个匹配元素内部的开头 HTML。
这个代码:
doc.select("select")
.prepend("<option value=" + collection + ">" + collection + "</option");
您还应尽量在CSS选择器中尽可能准确,以防止意外匹配。例如,您的选择器可以是table tr td select