Groovy-从日志文件中搜索和排泄xml代码

时间:2014-09-22 13:42:45

标签: parsing groovy

我在日志文件中有这么多文本,但有时我得到了作为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将帮助你们的人

1 个答案:

答案 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