2016-06-20 2 views
1

폴더를 확인하는 Watcher API를 사용하여 Java 프로그램을 코딩했으며 파일이 생성 될 때마다 html 태그에 특정 값을 추가합니다.Java에서 jsoup를 사용하여 특정 html 태그에 값을 삽입하는 방법은 무엇입니까?

이 내 WATCHER API 자바 클래스입니다 :

<td valign="middle"><select name="site"> 
<option value="collection">collection</option> 

: 이것은이 태그에 파일의 이름을 추가한다

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(); 

    } 

내 HTMLParser.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()); 
     } 
    } 
} 

내 파일의 이름이 default_collection.xml이라면, my java 프로그램은 default_collecti 인 xml 파일의 이름을 추출합니다. 에 내 html 파일이 추가됩니다

<td valign="middle"><select name="site"> 
    <option value="default_collection">default_collection</option> 

을하지만 대신 한 번, 내 자바 프로그램을 두 번 컬렉션을 추가하고 추가하는 :

<td valign="middle"><select name="site"> 
     <option value="default_collection">default_collection</option> 
     <option value="default_collection">default_collection</option> 

나는 문제가 무엇인지 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다. 대신 prepend를 사용해야합니다

답변

2

,

각 일치하는 요소의 내부 HTML의 시작에 제공되는 HTML을 추가 귀하의 경우에 더 적합합니다.

이 다음 코드 : 또한 예상치 못한 일치를 방지하기 위해 CSS 선택기에서 당신이 할 수있는만큼 정확하도록해야

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

. 예를 들어 선택기가 table tr td select

+0

일 수 있습니다. Nicolas 님, 솔루션을 사용해 보았습니다.

+0

어쩌면 그것은 내 측면에서 꽤 잘 작동하기 때문에 동일한 파일에 대해 여러 번 실행하기 때문일 수 있습니다. –

+0

알았습니다. 고마워. – Rose

관련 문제