Я хочу прочитать xml, а затем мне нужно вставить в базу данных. Моя проблема заключается в том, что значение содержит специальные символы.
def xmlResponse = """<?xml version = "1.0" encoding = "UTF-8"?>
<nm>
<item>
<Row>
<cod>1</cod>
<desc>RPAS <Management></desc>
</Row>
<Row>
<cod>110</cod>
<desc>FIGHTER3 & SIMULATION</desc>
</Row>
</item>
<nm>"""
Мой код:
def parser = new XmlSlurper()
def xmlPars = "${xmlResponse}".replaceAll("&", "&")
xmlPars2 = "${xmlPars}".replaceAll("<Management>", "<"+"<Management"+">")
def xml = parser.parseText("${xmlPars2}")
Это работает только для строки «Управление», а не для всех случаев, потому что, если я заменю все «<» и «>», парсер вернет ошибку.
Можете ли вы помочь мне написать код, который работает всегда?
Я не хочу экранировать эти символы (если это возможно), потому что моя вставка должна содержать строку, а также.
это не корректный xml, а что вы делаете - пытаетесь исправить результат неправильного форматирования xml. лучше исправить место, где вы строите этот xml...
однако есть простой способ, который может сработать для вас:
def xmlResponse = """<?xml version = "1.0" encoding = "UTF-8"?>
<nm>
<item>
<Row>
<cod>1</cod>
<desc>RPAS <Management></desc>
</Row>
<Row>
<cod>110</cod>
<desc>FIGHTER3 & SIMULATION</desc>
</Row>
</item>
</nm>"""
//let's convert each <desc>...</desc>
// to <desc><![CDATA[...]]></desc>
// then value inside CDATA does not require xml escaping
xmlResponse = xmlResponse.replaceAll('<desc>','<desc><![CDATA[').replaceAll('</desc>',']]></desc>')
def xml = new XmlSlurper().parseText(xmlResponse)
Лучше всего решить эту проблему с помощью XML. То, что вы пытаетесь проанализировать, не является XML, потому что эти символы нужно либо экранировать, заменять сущностями, либо значение, обернутое с помощью CDATA. Попытка обойти эти проблемы будет проблематичной и в какой-то момент, скорее всего, потерпит неудачу.