#groovy #w3c
#groovy #w3c
Вопрос:
Я хочу создать XML-узел w3c в 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.Узел (carRecords — это groovy.util.Узел).
Есть ли элегантный способ (который не требует стандартного java xml-кодирования) для этого?
Я ищу что-то, что будет выглядеть следующим образом:
def carRecords = new W3CXmlParser().parseText(CAR_RECORDS)
или что-нибудь в этом роде…
Спасибо!
Ответ №1:
Самый простой способ (псевдокод):
- Создайте древовидную структуру с
MarkupBuilder
- Преобразуйте это в строку с разметкой XML
- Проанализируйте эту строку, чтобы получить узлы W3C DOM
Справочная информация: API W3C DOM очень недружелюбен с точки зрения Groovy, поэтому MarkupBuilder
использует свой собственный тип.
Вот почему Groovy поддерживает обратную операцию: преобразуйте DOM-узлы W3C в groovy.util.Node
s с помощью DomToGroovy
Смотрите также: Создание XML с помощью MarkupBuilder от Groovy
Ответ №2:
Возможно, у меня не тот конец флешки, но это то, что вы хотели сделать?:
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 ) ) )