我在日志文件中有这么多文本,但有时我得到了作为xml代码的响应,我必须剪切这个xml代码并转移到其他文件。 例如:
sThread1....dsadasdsadsadasdasdasdas.......dasdasdasdadasdasdasdadadsada
important xml code to cut and move to other file: <response><important> 1 </import...></response>
important xml code to other file: <response><important> 2 </important...></response>
sThread2....dsadasdsadsadasdasdasdas.......dasdasdasdadasdasdasdadadsada
阻碍:xml代码从符号的差异开始(并不总是以相同的符号开头)
请帮我找到如何在文本中查找xml代码的方法 现在我测试了substring()方法,但xml代码并不总是从这个相同的符号开始:(
编辑: 我找到了我想要的东西,我搜索的函数是indexOf()。 我需要一些字母,其中字符串“响应是:”结束:所以我使用了:
int positionOfXmlInLine = lineTxt.indexOf("<response")
在此之后,我可以将字符串剪切到行尾:
def cuttedText = lineTxt.substring(positionOfXmlInLine);
所以我现在只有日志文件中的XML文本/代码。 接下来是一个像BDKosher一样的解析XML值。 Hoply将帮助你们的人
答案 0 :(得分:1)
假设您的XML足够有效,您可能可以利用XmlSlurper。下面的代码将获取日志的每一行,将其包装在根元素中,然后解析它。解析后,它会提取并打印出<important>
元素的value
属性的值,但您可以对数据执行任何操作:
def input = '''
sThread1..sdadassda..sdadasdsada....sdadasdas...
important code to cut and move to other file: **<response><important value="1"></important></response>**
important code to other file: ****<response><important value="3"></important></response>****
sThread2..dsadasd.s.da.das.d.as.das.d.as.da.sd.a.
'''
def parser = new XmlSlurper()
input.eachLine { line, lineNo ->
def output = parser.parseText("<wrapper>$line</wrapper>")
if (!output.response.isEmpty()) {
println "Line $lineNo is of importance ${output.response.important.@value.text()}"
}
}
打印出来:
Line 2 is of importance 1
Line 3 is of importance 3