Xml 外部存储GPath表达式

Xml 外部存储GPath表达式,xml,groovy,gpath,Xml,Groovy,Gpath,我正在使用groovy处理一些XML,我已经阅读了以下教程。我了解如何替换节点,但我想做的是将这些gpath表达式存储在一个文件中,并在运行时读取它们,以“检测”URL、数据库连接属性等内容,并根据需要替换节点值/属性 有人知道这是否可能吗 [编辑] 请举例说明 def books = ''' <response version-api="2.0"> <value> <books>

我正在使用groovy处理一些XML,我已经阅读了以下教程。我了解如何替换节点,但我想做的是将这些gpath表达式存储在一个文件中,并在运行时读取它们,以“检测”URL、数据库连接属性等内容,并根据需要替换节点值/属性

有人知道这是否可能吗

[编辑] 请举例说明

def books = '''
    <response version-api="2.0">
        <value>
            <books>
                <book available="20" id="1">
                    <title>Don Xijote</title>
                    <author id="1">Manuel De Cervantes</author>
                </book>
                <book available="14" id="2">
                    <title>Catcher in the Rye</title>
                   <author id="2">JD Salinger</author>
               </book>
               <book available="13" id="3">
                   <title>Alice in Wonderland</title>
                   <author id="3">Lewis Carroll</author>
               </book>
               <book available="5" id="4">
                   <title>Don Xijote</title>
                   <author id="4">Manuel De Cervantes</author>
               </book>
           </books>
       </value>
    </response>
'''


def response = new XmlParser().parseText(books)

response.value.books.book[0].author.replaceNode{
        author(id:"99s","Harper Lee")
}


// None of the following will work, but hopefully it shows what I'd like to do
// I'd like to store the path expression as a string 
def path = "response.value.books.book[0].author"

// 
path.replaceNode{
    author(getReplacementValueFromSomeLookup(path) )    
}
def books=''
唐·西约特
曼努埃尔·德塞万提斯
麦田守望者
塞林格
爱丽丝梦游仙境
刘易斯·卡罗尔
唐·西约特
曼努埃尔·德塞万提斯
'''
def response=new XmlParser().parseText(书籍)
response.value.books.book[0].author.replaceNode{
作者(id:“99s”,“Harper Lee”)
}
//以下这些都不起作用,但希望它能说明我想做什么
//我想将路径表达式存储为字符串
def path=“response.value.books.book[0]。作者”
// 
path.replaceNode{
作者(getReplacementValueFromSomeLookup(路径))
}

非常接近这个问题:

def books=''
唐·西约特
曼努埃尔·德塞万提斯
麦田守望者
塞林格
爱丽丝梦游仙境
刘易斯·卡罗尔
唐·西约特
曼努埃尔·德塞万提斯
'''
def response=new XmlParser().parseText(书籍)
def path=“ROOT.value.books.book[0]。作者”
Eval.me('ROOT',response,path).replaceNode{
作者(‘演示’)
}
println groovy.xml.XmlUtil.serialize(响应)

非常接近这个问题:

def books=''
唐·西约特
曼努埃尔·德塞万提斯
麦田守望者
塞林格
爱丽丝梦游仙境
刘易斯·卡罗尔
唐·西约特
曼努埃尔·德塞万提斯
'''
def response=new XmlParser().parseText(书籍)
def path=“ROOT.value.books.book[0]。作者”
Eval.me('ROOT',response,path).replaceNode{
作者(‘演示’)
}
println groovy.xml.XmlUtil.serialize(响应)

您是否介意显示示例输入和所需输出xml?您是否介意显示示例输入和所需输出xml?感谢您的帮助,从我所看到的情况来看,这似乎是最好的答案。我最初建议的方法最终并不是正确的,但谢谢你的回答。我真正想要的是SQL for XML/JSON,GPath/XPath感觉有点紧张。谢谢你,这似乎是我所能看到的最好的答案。我最初建议的方法最终并不是正确的,但谢谢你的回答。我真正想要的是SQL for XML/JSON,GPath/XPath感觉有点紧张。
def books = '''
    <response version-api="2.0">
        <value>
            <books>
                <book available="20" id="1">
                    <title>Don Xijote</title>
                    <author id="1">Manuel De Cervantes</author>
                </book>
                <book available="14" id="2">
                    <title>Catcher in the Rye</title>
                   <author id="2">JD Salinger</author>
               </book>
               <book available="13" id="3">
                   <title>Alice in Wonderland</title>
                   <author id="3">Lewis Carroll</author>
               </book>
               <book available="5" id="4">
                   <title>Don Xijote</title>
                   <author id="4">Manuel De Cervantes</author>
               </book>
           </books>
       </value>
    </response>
'''


def response = new XmlParser().parseText(books)

def path = "ROOT.value.books.book[0].author"

Eval.me('ROOT',response, path).replaceNode{
    author('DEMO')    
}

println groovy.xml.XmlUtil.serialize(response)