문제

예 :

<div>
    this is first
    <div>
        second
   </div>
</div>
.

나는 자연 언어 가공을 위해 일하고 있습니다. 나는 웹 사이트를 번역해야합니다 (Google 번역을 사용하지 않아)은 "첫 번째"와 "두 번째"는 별도로 대체 할 수 있습니다.각 DIV의 언어 텍스트.처음에는 텍스트를 추출하면 "이는 처음 두 번째"표시됩니다. 재귀를 사용하여 더 깊이 파고를 사용하면 "두 번째"

저를 도와주세요!

편집

offytext () 메소드를 사용하면 다음 HTML 코드에서 문제가 발생합니다.

<div style="top:+0.2em; font-size:95%;">
    the
    <a href="/wiki/Free_content" title="Free content">
        free
    </a>
    <a href="/wiki/Encyclopedia" title="Encyclopedia">
        encyclopedia
    </a>
    that
    <a href="/wiki/Wikipedia:Introduction" title="Wikipedia:Introduction">              
        anyone can edit
    </a>
    .
</div>
.

인쇄 :

that.

무료

백과 사전

누구나 편집 할 수 있습니다

그러나 그것은해야합니다 :

.

백과 사전

누구나 편집 할 수 있습니다

도움이 되었습니까?

해결책

첫 번째 텍스트를 추출하면 "이것은 처음 두 번째"

이 표시됩니다.

ownText() 대신 text()를 사용하면 요소 만 직접 포함하는 요소 만 사용할 수 있습니다.

다음은 예제입니다.

final String html = "<div>\n"
        + "    this is first\n"
        + "    <div>\n"
        + "        second\n"
        + "   </div>\n"
        + "</div>";

Document doc = Jsoup.parse(html); // Get your Document from somewhere


Element first = doc.select("div").first(); // Select 1st element - take the first found
String firstText = first.ownText(); // Get own text

Element second = doc.select("div > div").first(); // Same as above, but with 2nd div
String secondText = second.ownText();

System.out.println("1st: " + firstText);
System.out.println("2nd: " + secondText);
.

다른 팁

사용중인 모든 언어로 XML 파서를 사용할 수 있습니다.다음은 Java입니다. http : //www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

DIV의 TextContent를 사용하여 콘텐츠를 추출하는 것처럼 보입니다.이 요소의 내용과 모든 하위 요소를 얻을 수 있습니다. (Java : 이것은 요소의 getTextContent 메소드가 될 것입니다)

대신 ChildNodes (Java : GetChildNodes 메소드)를 검사합니다. 노드에는 노드가 텍스트 노드 (java : node.text_node) 또는 요소 (java : node.element_node)인지 여부를 확인할 수있는 "NoDetype"(Java : GetNodetype) 속성이 있습니다. 그래서 당신에게 예를 들면, 당신은 이것처럼 보이는 노드의 나무가 있습니다 ...

div (Element)
    this is first (TextNode)
    div (Element)
        second (TextNode)
.

외부 div는 텍스트의 첫 번째 부분과 내부 div 두 개의 노드 만 직접 포함합니다. 그런 다음 내부 div는 텍스트 "두 번째"텍스트를 포함합니다.

그래서 노드가 텍스트 노드 인 경우, Node가 텍스트 노드 인 경우, 그렇지 않으면 요소를 변환합니다. 다른 종류의 노드, 코멘트 등이 있지만, 당신의 목적을 위해 당신은 아마도 당신이 그것을 무시할 수 있습니다.

W3C DOM API를 사용하고 있다고 가정합니다. http://docs.oracle.com/javase. /7/docs/api/org/w3c/dom/node.html

 Elements divs=doc.getElementsByTag("div");

     for (Element element : divs) {
            System.out.println(element.text());

        }
.

JSOUP HTML 파서를 사용하는 경우 작업이 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top