根据groovy中的条件返回另一个节点

时间:2016-03-15 04:17:37

标签: groovy scripting

我的XML就像:

<app>
   <module>
      <web>
         <web-uri>abc.war</web-uri>
         <context-root>abc</context-root>
      </web>
   </module>
   <module>
      <web>
         <web-uri>abc.pl</web-uri>
         <context-root>adf</context-root>
      </web>
   </module>
</app>

仅当context-root值以 war 结尾时,我才需要web-uri值。作为一个清单。

我写了类似的东西:

def ctxRootList = nodeList.'**'.findAll{
        ctxRoot -> 
                    ctxRoot.module.web."web-uri".text().endsWith(".war") 
    }*.text()

这里有两个问题:

  1. 我不知道如何获得其他兄弟而不是web-uri
  2. 现在结果似乎是作为所有这些值的连接字符串返回的。那么,如何让它作为值列表返回

1 个答案:

答案 0 :(得分:1)

你走了:

def txt = '''
<app>
    <module>
            <web>
                <web-uri>abc.war</web-uri>
                <context-root>abc</context-root>
            </web>
        </module>
        <module>
            <web>
                <web-uri>abc.pl</web-uri>
                <context-root>adf</context-root>
            </web>
    </module>
</app>'''

def xml = new XmlSlurper().parseText(txt)
xml.module.web.findAll { it.'web-uri'.text().endsWith('war') }*.'context-root'*.text()

诀窍是搜索web元素 - web-uricontext-root的父元素。如果找到这样的元素,您可以轻松地引用它的孩子。