如何使用Java中的jsoup在特定的html标记中插入值?

时间:2016-06-20 19:02:48

标签: java html jsoup

我使用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>

我不确定问题是什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您应该使用prepend代替,在您的情况下更合适

  

将提供的HTML添加到每个匹配元素内部的开头   HTML。

这个代码:

doc.select("select")
    .prepend("<option value=" + collection + ">" + collection + "</option");

您还应尽量在CSS选择器中尽可能准确,以防止意外匹配。例如,您的选择器可以是table tr td select