2016-11-05 8 views
0

私は巨大なStringとして私に来るHTMLを解析しようとしています。私が13行目に行くと、NodeChild page = it.parent()Html Sloping in Groovy

私が探しているキーを見つけることができますが、データはThis Is Value One In My KeyThis is Value Two in my KeyThis is Value Three In My Keyのように私に届きます。私は、2つの間のセパレータが常にUppercaseUppercase(WithoutSpaces)であるという定期的な傾向を見ています。

私はそれをArrayListに入れたいと思います。私が逃している方法がありますか?from the docsこれは自動的にこれを行うことができますか?これを一緒に解析するより良い方法はありますか?

class htmlParsingStuff{ 

    private def slurper = new XmlSlurper(new Parser()) 

    private void slurpItUp(String rawHTMLString){ 
     ArrayList urlList = [] 
     def htmlParser = slurper.parseText(rawHTMLString) 

     htmlParser.depthFirst().findAll() { 
      //Loop through all of the HTML Tags to get to the key that I am looking for 
      //EDIT: I see that I am able to iterate through the parent object, I just need a way to figure out how to get into that object 
      boolean trigger = it.text() == 'someKey' 
      if (trigger){ 
       //I found the key that I am looking for 
       NodeChild page = it.parent() 
       page = page.replace('someKey', '') 
       LazyMap row = ["page": page, "type": "Some Type"] 
       urlList.add(row) 
      } 
     } 
    } 
} 
+0

私は何かに上だと思う大丈夫、実現しませんでした'.parent'、' .children'、 '.childNodes'を呼び出すことができます –

答えて

1

特定のhtmlがわからないので、私はあなたに作業コードを提供できません。

ただし、HTMLの解析にXmlSlurperを使用しないでください.HTMLは整形されていないため、XmlSlurperは適切なツールではありません。

HTMLの場合、JSoupのようなライブラリを使用します。 JQueryの知識があれば、特に使いやすくなります。あなたのHTMLスニペットを投稿していなかったので、私は私自身の例作っ:

@Grab(group='org.jsoup', module='jsoup', version='1.10.1') 
import org.jsoup.Jsoup 

def html = """ 
<html> 
<body> 
    <table> 
    <tr><td>Key 1</td></tr> 
    <tr><td>Key 2</td></tr> 
    <tr><td>Key 3</td></tr> 
    <tr><td>Key 4</td></tr> 
    <tr><td>Key 5</td></tr> 
    </table> 
</body> 
</html>""" 

def doc = Jsoup.parse(html) 
def elements = doc.select('td') 
def result = elements.collect {it.text()} 
// contains ['Key 1', 'Key 2', 'Key 3', 'Key 4', 'Key 5'] 

あなたが使用する文書を操作することを

def doc = Jsoup.parse(html) 
def elements = doc.select('td') 
elements.each { oldElement -> 
    def newElement = new Element(Tag.valueOf('td'), '') 
    newElement.text('Another key') 
    oldElement.replaceWith(newElement) 
} 
println doc.outerHtml()