2013-02-23 48 views
0

我正在使用Groovy 1.8.6來解析在描述元素中具有CDATA的KML文件,並用父級(即地標)元素返回。 的KML看起來是這樣的:如何使用Groovy DOMBuilder在CDML中使用CDATA查找元素?

<Placemark> 
    <description><![CDATA[ 
     ID=SVM10<br> 
    ]]></description> 
    </Placemark> 

和輸入的第一個參數爲Groovy代碼看起來是這樣的:

def reader = new FileReader(args[0]) 
    def doc = DOMBuilder.parse(reader) 
    def content = doc.documentElement 

    use (DOMCategory) { 
     def point = content.Document.Placemark.findAll{ it.text().contains('SVM') } 
     println point.size() 
    } 

但它顯示爲0 - 即沒有記錄被發現。 如何修改代碼以便能夠在CDATA括號內找到內容?

回答

0

不知道爲什麼你的代碼不能正常工作,但你可以使用XPath做相同的:

package groovyxml 

import groovy.xml.DOMBuilder 
import javax.xml.xpath.* 

String source = """ 
<Placemark> 
    <description>oo<![CDATA[ 
     ID=SVM10<br> 
    ]]>aa</description> 
    </Placemark> 
    """ 

    def reader = new StringReader(source) 
    def doc = DOMBuilder.parse(reader) 
    def xpath = XPathFactory.newInstance().newXPath() 
    def point = xpath.evaluate( 
     "/Placemark/description[contains(text(), 'SVM')]", 
     doc, 
     XPathConstants.NODESET) 
    println point.length 

...打印1.

相關問題