用 GROOVY 中的特殊字符解析 xml
Parse xml with special characters in GROOVY
我想读取 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}")
这仅适用于字符串 'Management',并非适用于所有情况,因为如果我替换所有“<”和“>”,解析器 return 就会出错。
你能帮我写一个永远有效的代码吗?
我不想转义这些字符(如果可能的话),因为我的插入内容应该包含字符串。
这不是有效的 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,然后我必须在数据库中插入。 我的问题是当值包含特殊字符时。
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}")
这仅适用于字符串 'Management',并非适用于所有情况,因为如果我替换所有“<”和“>”,解析器 return 就会出错。
你能帮我写一个永远有效的代码吗?
我不想转义这些字符(如果可能的话),因为我的插入内容应该包含字符串。
这不是有效的 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)