2017-11-01 14 views
0

私はいくつかのXMLを処理するためにgroovyを使用しています。私は次のチュートリアルhttp://groovy-lang.org/processing-xml.htmlを読んでいます。私はノードを置き換える方法を理解していますが、私がしたいのは、これらのgpath式をファイルに保存し、実行時にそれらを読んで、URL、データベース接続プロパティーなどのものを検出し、必要に応じてノード値/属性を置き換えます。GPath式を外部に格納する

これが可能なら誰でも知っていますか?

[編集] 例要求されるように、この質問に非常に近い

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))  
} 
+0

はあなたのサンプル入力し、所望の出力XMLを示す気にしませんか? – Rao

答えて

2

How to get key from ArrayList nested in JSON using Groovy and change its value

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) 
+0

これはありがとう、それは私が見ることができるものから最高の答えのようです。私が最初に示唆したアプローチは、最終的には正しい方法であると感じていませんでしたが、あなたの答えに感謝します。私が本当に欲しいのは、XML/JSON用のSQLです.GPath/XPathはちょっと集中的です。 – K2J

関連する問題