2012-04-30 3 views
0

"mono"요소에서 HTML 코드를 추출해야하지만이 HTML 파일이 필요합니다. HTML 태그가 필요합니다. Groovy 프로그래밍 언어를 사용해야합니다.groovy를 사용하여 XML 파일에서 HTML 코드를 추출하는 방법

모든 div의 내부에 "모노"요소는

미리 감사 div의 포함 HTML 태그입니다.

----

는 면역학 ---- MONOS 목록 2 장 있습니다

import javax.xml.parsers.*; 

xml = new XmlParser().parse("languages.xml") 

println("There are " +xml.chapters.chapter.size() +" Chapters") 

for (int i = 0; i < xml.chapters.chapter.size(); i++) { 

      def chapter = xml.chapters.chapter[i] 
      def chapterName = chapter.'@name' 
      println chapterName 

      println("---- Monos List ----\n\n") 


      for (int j = 0; j < chapter.monos.mono.size(); j++) { 

         def mono = chapter.monos.mono[j] 
         println("Mono Content: " + mono.toString()); 
      } 

      println("---- End Monos List ----\n\n") 

} 

하지만 난 그냥 다음 OUPUT를 얻을 :

<dataset> 
    <chapters> 
     <chapter id="700" name="Immunology"> 
      <title>Immunology</title> 
      <monos> 
       <mono id="382727"> 

        <div> 
         <h1>blah blah</h1> 
        </div> 
        <div> 
         <p>blah blah</p> 
        </div> 

      </mono> 
      </monos> 
     </chapter> 
     <chapter id="701" name="hematology"> 
      <title>Inmuno Hematology</title>  
      <monos> 
       <mono id="blah blah"> 
        <div> 
         <h1>blah blah</h1> 
        </div> 
        <div> 
         <div class="class1">blah blah</div> 
        </div> 
       </mono> 
      </monos> 
     </chapter> 
    </chapters> 
</dataset> 

나는 시도

모노 콘텐츠 : 모노 [attributes = {id = 382727}; 값 = [div [attributes = {}; 값 = [h1 [속성 = {}; 값 = [blah blah]]]], div [attributes = {}; 값 = [p [속성 = {}; 값 = [저쩌구]]]]]] ---- 끝 MONOS 목록 ----

혈액 ---- MONOS 목록 ----

모노 내용 : 모노 [속성 = {id = blah blah}; 값 = [div [attributes = {}; 값 = [h1 [속성 = {}; 값 = [blah blah]]]], div [attributes = {}; 값 = [div [attributes = {class = class1}; 값 : [blah blah]]]]] ---- End Monos List ----

+0

? 모노 태그 요? –

+0

나는 다음 코드 번째 시도했지만 그것은 나에게 출력을 제공 : 2 장 면역학 ---- MONOS 목록이 있습니다 ---- 모노 내용 : 모노 [= {ID = 382727을} 속성; 값 = [div [attributes = {}; 값 = [h1 [속성 = {}; 값 = [blah blah]]]], div [attributes = {}; 값 = [p [속성 = {}; 값 = [저쩌구]]]]]] ---- 끝 MONOS 목록 ---- 혈액 ---- MONOS 목록 ---- 모노 내용 : 모노 [= {ID를 속성 = blah blah}; 값 = [div [attributes = {}; 값 = [h1 [속성 = {}; 값 = [blah blah]]]], div [attributes = {}; 값 = [div [attributes = {class = class1}; value = [blah blah]]]]] ---- End Monos List ---- –

+0

닫는 챕터 태그가 없습니다. –

답변

3
import groovy.xml.* 

def src=""" 
<dataset> 
    <chapters> 
     <chapter id="700" name="Immunology"> 
      <title>Immunology</title> 
      <monos> 
       <mono id="382727"> 

        <div> 
         <h1>blah blah</h1> 
        </div> 
        <div> 
         <p>blah blah</p> 
        </div> 

      </mono> 
      </monos> 
     </chapter> 
     <chapter id="701" name="hematology"> 
      <title>Inmuno Hematology</title>  
      <monos> 
       <mono id="blah blah"> 
        <div> 
         <h1>blah blah</h1> 
        </div> 
        <div> 
         <div class="class1">blah blah</div> 
        </div> 
       </mono> 
      </monos> 
     </chapter> 
    </chapters> 
</dataset> 
""" 

def parsed=new XmlSlurper().parseText(src) 

parsed.'**'.findAll{it.name()=='mono'}.each{mono-> 
    mono.children().each {htmlElement-> 
     println new StreamingMarkupBuilder().bind{out << htmlElement}.toString() 
    } 
} 
+0

Larry Battle의 대답이 먼저 있었지만 XML 프롤로그를 피하기 위해 XmlSerializer 대신 StreamingMarkupBuilder를 사용했다. – loteq

+0

당신의 대답은 제 것보다 낫습니다.StreamingMarkupBuilder를 XmlSlurper와 함께 사용하는 방법을 찾기가 힘들었습니다. 그래서 XmlUtil을 사용했습니다. –

+0

@Larry : 자바에서 XML을 파싱하는 것의 어려움은 내가 도울 수없는 것과 같다. 매번 그루비에서 java로 해내 고문을 해내는데 ... Jaime : Writer 나 다른 스트리밍 인터페이스가있는 경우 bind()의 결과는 Writable이므로 bind()를 사용할 수 있습니다. .}. writeTo (myWriter) – loteq

2

xml 내용을 구문 분석하기 위해 XmlSlurper 또는 XmlParser를 사용할 수 있습니다.

http://groovy.codehaus.org/Reading+XML+using+Groovy 년대 + XmlSlurper http://groovy.codehaus.org/Reading+XML+using+Groovy 년대 + XmlParser가

import groovy.xml.* 
def RECORDS = ''' 
     <dataset> 
     <chapters> 
      <chapter id="700" name="Immunology"> 
       <title>Immunology</title> 
       <monos> 
        <mono id="382727"> 

          <div> 
           <h1>blah blah</h1> 
          </div> 
          <div> 
           <p>blah blah</p> 
          </div> 

        </mono> 
       </monos> 
       </chapter>  
       <chapter id="701" name="hematology"> 
        <title>Inmuno Hematology</title>  
        <monos> 
         <mono id="blah blah"> 
          <div> 
           <h1>blah blah</h1> 
          </div> 
          <div> 
           <div class="class1">blah blah</div> 
          </div> 
         </mono> 
        </monos> 
       </chapter> 
      </chapters> 
     </dataset>  
    ''' 
def records = new XmlSlurper().parseText(RECORDS) 
def monos = records.depthFirst().findAll{ it.name().equals('mono') } 
assert monos[0].toString() == "blah blahblah blah"; 
XmlUtil.serialize(monos[0]); 

출력을 :

html로가에서의
<?xml version="1.0" encoding="UTF-8"?><mono id="382727"> 
    <div> 
    <h1>blah blah</h1> 
    </div> 
    <div> 
    <p>blah blah</p> 
    </div> 
</mono> 
+0

죄송합니다, 거의 동일한 답변, LOL – loteq

+0

정말 고마워요! 너의 대답을 위해. header없이 텍스트 만 가져올 수 있습니까? html 태그 보존? –

+0

loteq의 대답은 XMLUtil 대신 StreamingMarkupBuilder를 사용합니다. –

관련 문제