Как построить документ W3C в Groovy? - PullRequest
0 голосов
/ 26 мая 2011

Я хочу построить узел w3c xml в groovy:

def CAR_RECORDS = '''<records>
             <car name='HSV Maloo' make='Holden' year='2006'/>
             <car name='P50' make='Peel' year='1962'/>
             <car name='Royale' make='Bugatti' year='1931'/>
           </records>
         '''

        def carRecords = new XmlParser().parseText(CAR_RECORDS)

, но все, что я получаю с помощью MarkupBuilder - это groovy.util.Node (carRecords - это groovy.util.Node).Есть ли элегантный способ (который не требует стандартного Java-кодирования XML), чтобы сделать это?

То, что я ищу, будет выглядеть примерно так:

def carRecords = new W3CXmlParser().parseText(CAR_RECORDS)

или что-нибудь в этом роде ...

Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Самый простой способ (псевдокод):

  • Создание структуры дерева с MarkupBuilder
  • Преобразование этого в строку с разметкой XML
  • Анализэта строка для получения узлов W3C DOM

Справочная информация: API-интерфейс W3C DOM очень недружелюбен с точки зрения Groovy, поэтому MarkupBuilder использует свой собственный тип.

ЧтоВот почему Groovy поддерживает обратную операцию: преобразование DOM-узлов W3C в groovy.util.Node s с использованием DomToGroovy

См. также: Создание XML с использованием Groovy MarkupBuilder

1 голос
/ 26 мая 2011

У меня может быть неправильный конец палки, но вы хотели это сделать?:

import org.xml.sax.InputSource
import org.w3c.dom.Node
import javax.xml.parsers.DocumentBuilderFactory

def CAR_RECORDS = '''<records>
  <car name='HSV Maloo' make='Holden' year='2006'/>
  <car name='P50' make='Peel' year='1962'/>
  <car name='Royale' make='Bugatti' year='1931'/>
</records>'''

Node carRecords = DocumentBuilderFactory.newInstance()
                                        .newDocumentBuilder()
                                        .parse( new InputSource( new StringReader( CAR_RECORDS ) ) )
...