如何从CSV feeder变量中读取XML文件内容为字符串?
解决方案
1. 解析CSV中的读取表达式,实际读取文件内容
CSV里存的"read('classpath:data/XML-Order.txt')"是纯字符串,直接赋值只会输出这段文本,你需要解析这个字符串、提取文件路径后执行实际读取操作:
import org.springframework.core.io.ClassPathResource // 假设从CSV读取到的order_contents值为readExpr val readExpr = "read('classpath:data/XML-Order.txt')" // 提取classpath路径:匹配单引号内的内容 val pathPattern = """read\('(classpath:.+)'\)""".r val actualPath = readExpr match { case pathPattern(path) => path case _ => throw new IllegalArgumentException("无效的读取表达式格式") } // 读取文件内容为字符串 val xmlContent = scala.io.Source.fromInputStream(new ClassPathResource(actualPath).getInputStream).mkString
这段代码会提取出文件路径,读取XML-Order.txt中的实际XML字符串,而非原表达式文本。
2. 解决SAXParseException错误
触发该错误通常是因为XML字符串直接嵌入<contents>标签时,存在未转义的特殊字符(如<、>、&),或XML结构不合法。对应解决方式:
- 如果
<contents>仅需存储XML文本而非解析它,将读取到的XML字符串包装成CDATA块,让XML解析器将其视为纯文本:<contents><![CDATA[${xmlContent}]]></contents> - 如果需要解析内部XML结构,需确保读取到的XML是完整合法的片段(如单一根节点、特殊字符已转义),若原文件存在语法问题,需先修正文件内容。
额外提示
如果CSV中的读取表达式格式固定,可简化路径提取逻辑(比如直接截取单引号间的内容);读取文件时,Source.fromInputStream会自动管理流资源,也可使用try-with-resources确保资源安全释放。
内容的提问来源于stack exchange,提问作者Monster
相关产品推荐
相关产品推荐

