如何使用Groovy DOMBuilder使用CDATA在KML中查找元素?

时间:2013-02-23 17:44:31

标签: groovy kml cdata

我使用Groovy 1.8.6解析在description元素中具有CDATA的KML文件,并返回父元素(即Placemark)元素。 KML看起来像这样:

    <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括号中找到内容?

1 个答案:

答案 0 :(得分: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。