1

好吧,我将 xml-response 与很多符号放在一起,如下所示:

def xmlString = "<TAG1>1239071ABCDEFGH</TAG1><TAG2>1239071ABCDEFGH</TAG2>"

使用 xmlSlurper 只留下数字

def node = 
new XmlSlurper().parseText(xmlString)
    def nodelist = [node.tag1.tag2]

在这个“节点”得到一个像“1239071123907112390711239071”这样的值之后,我尝试用java RegExp将数字分开7

System.out.println(java.util.Arrays.toString( nodelist.node.split("(?<=\G.{7})") ))

我哪里做错了?它不起作用

4

1 回答 1

1

假设您有一些有效的 xml,例如:

def xmlString = """<document>
                  |    <TAG1>1239071ABCDEFGH</TAG1>
                  |    <TAG2>1239071ABCDEFGH</TAG2>
                  |</document>""".stripMargin()

然后你可以得到所有以 开头的元素TAG,并为这些元素中的每一个修剪掉不是数字的结束字符:

def nodeList = new XmlSlurper().parseText( xmlString )
                               .'**'
                               .findAll { node ->
                                   node.name().startsWith( 'TAG' )
                               }
                               .collect { node ->
                                   it.text().takeWhile { ch ->
                                       Character.isDigit( ch )
                                   }
                               }

nodeList在此示例中将等于:

assert nodeList == ['1239071', '1239071']

如果您想保持这些数字与TAG包含它们的数字相关联(假设TAGn标签是唯一的),那么您可以更改为collectEntries

def nodeList = new XmlSlurper().parseText( xmlString )
                               .'**'
                               .findAll { node ->
                                   node.name().startsWith( 'TAG' )
                               }    
                               .collectEntries { node ->
                                   [ node.name(), node.text().takeWhile { Character.isDigit( it ) } ]
                               }


assert nodeList == [TAG1:'1239071', TAG2:'1239071']
于 2013-08-14T09:40:15.940 回答