繁体   English   中英

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

[英]How to insert values in a particular html tag using jsoup in Java?

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

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

您应该改用prepend ,这更适合您的情况

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

代码如下:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM