0

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 ブラケット内のコンテンツを検索できるようにコードを変更するにはどうすればよいですか?

4

1 に答える 1

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 を印刷します。

于 2013-02-24T10:34:28.343 に答える