2011-01-20 13 views
8

オリジナルのレイアウトを維持しながら、既存のXMLファイルを編集したいと考えています。これには、改行、コメントなどが含まれます。編集は、XML内の要素を検索し、テキスト値を変更することで構成されます。Groovy XMLファイルを編集してコメントや改行を残す

私の最初の試みはXmlUtil.serializeでXMLParserを使用していましたが、それは要件を満たしていません。

誰でも、XMLParserの代わりに、元のXML文字列の編集が適切な場所を知っていますか?もしそうでなければ、おそらくXPath/GPathを使って検索を実行し、findの場所を返すライブラリがあるので、StringBuilder.replaceを実行できます。

EDIT:今のところ

私はその後、私は、インデックスに置き換えるをしています(私はXPathを使用して見つけることができる)XMLノードの文字列のインデックスを見つけるために、この機能を作りました。簡単なノードのために正常に動作します <ノード>値< /ノード>:

def find_location_by_node(xmlString, root_xml, node) 
{ 
    current_index = 0; 

    for(current_node in root_xml.depthFirst()) 
    { 
     node_name = current_node.name().getLocalPart() 
     current_index = xmlString.indexOf('<' + node_name, current_index); 

     if(current_node == node) 
     { 
     end_tag = '</' + node_name + '>'; 
     end_tag_index = xmlString.indexOf(end_tag, current_index) + end_tag.length(); 

     return [current_index, end_tag_index]; 
     } 
    } 

    return -1; 
} 

答えて

9

あなたはupdate your XML with DOMCategoryをできました。 DOMは元のレイアウトを維持します。

import groovy.xml.DOMBuilder 

def input = ''' 
<shopping> 
    <category type="groceries"> 
     <item>Chocolate</item> 
     <item>Coffee</item> 
    </category> 
    <category type="supplies"> 
     <item>Paper</item> 
     <item quantity="4">Pens</item> 
    </category> 
    <category type="present"> 
     <item when="Aug 10">Kathryn's Birthday</item> 
     <item>Chocolate</item> 
    </category> 
</shopping> 

''' 

def doc = DOMBuilder.parse(new StringReader(input)) 
def root = doc.documentElement 
use(groovy.xml.dom.DOMCategory) { 
    def chocolate = root.depthFirst().grep{it.text() == "Chocolate"} 
    chocolate*.value = "Nutella" 
} 

def result = groovy.xml.dom.DOMUtil.serialize(root) 
println result 
+0

返信ありがとうございました:) – mbdev

+1

groovy.xml.dom.DOMUtilはgroovy 1.8以降ではありません。保存するには、groovy.xml.XmlUtil.serialize(root)を使用する必要があります。 –

+1

これにより書式は維持されますが、コメントは失われます。 XMLでコメントを保存するには、ここをクリックしてください:https://stackoverflow.com/questions/20690526/preserve-formatting-when-updating-xml-file-with-groovy#20720694 –

関連する問題