2017-12-13 16 views
0

既存のXMLに親ノードを挿入する必要があります。親ノードに子ノードを追加する方法の例を見つけましたが、xmlに新しいルートノードを追加する方法はありません。しかし、Groovyを使用したXMLへの親ノードの追加

class Test { 
    static stringXML = "C:/Users/xyz/original.xml" 

    static main(args) { 

     def baseXML = new XmlSlurper().parse(new File(stringXML))   
     baseXML.cars.parent.appendNode('List_Wrapper')   
     def writer = new FileWriter("C:/Users/xyz/updated.xml") 
     groovy.xml.XmlUtil.serialize(baseXML,writer)  
    } 
} 

: 私のソースXMLは

<?xml version="1.0" encoding="UTF-8" ?> 
<Cars> 
    <Car> 
     <Make>Hyundai</Make> 
     <Model>Accent</Model> 
     <Year>2016</Year> 
    </Car> 
    <Car> 
     <Make>Mitsubishi</Make> 
     <Model>Mirage</Model> 
     <Year>2016</Year> 
    </Car> 
    <Car> 
     <Make>Ford</Make> 
     <Model>Fiesta</Model> 
     <Year>2017</Year> 
    </Car> 
</Cars> 

で、私の新しいXMLは次のようになります。このような何かを意味し、私はgroovy.Iに新しいです

<?xml version="1.0" encoding="UTF-8" ?> 
<List_Wrappers> 
    <Cars> 
     <Car> 
      <Make>Hyundai</Make> 
      <Model>Accent</Model> 
      <Year>2016</Year> 
     </Car> 
     <Car> 
      <Make>Mitsubishi</Make> 
      <Model>Mirage</Model> 
      <Year>2016</Year> 
     </Car> 
     <Car> 
      <Make>Ford</Make> 
      <Model>Fiesta</Model> 
      <Year>2017</Year> 
     </Car> 
    </Cars> 
</List_Wrappers> 

タグは追加されませんが、変更されたXMLは次のようになります。

<?xml version="1.0" encoding="UTF-8" ?> 
<tag0:Cars> 
    <tag0:Car> 
     <tag0:Make>Hyundai</tag0:Make> 
     <tag0:Model>Accent</tag0:Model> 
     <tag0:Year>2016</tag0:Year> 
    </tag0:Car> 
    <tag0:Car> 
     <tag0:Make>Mitsubishi</tag0:Make> 
     <tag0:Model>Mirage</tag0:Model> 
     <tag0:Year>2016</tag0:Year> 
    </tag0:Car> 
    <tag0:Car> 
     <tag0:Make>Ford</tag0:Make> 
     <tag0:Model>Fiesta</tag0:Model> 
     <tag0:Year>2017</tag0:Year> 
    </tag0:Car> 
</tag0:Cars> 

これを理解する際に助けが必要です。あなたのコード内

答えて

0

ライン:

baseXML.cars.parent.appendNode('List_Wrapper')

  • Carsはnode.YouはそれをこのbaseXML.Carsを置くことができない、あなたのルートです。

  • あなたはroot.parent

は、このコードを試してみてくださいすることはできません、それはあなたの要件を満たすだろう、

def newXml = new groovy.xml.StreamingMarkupBuilder().bind { 

List_Wrapper { 

    mkp.yield baseXML 

    } 
} 
println groovy.xml.XmlUtil.serialize(newXml) 

アップデート1:

使用XmlParser()、以下に示すと同様、
def baseXML = new XmlParser().parse(new File(stringXML))を避けるに問題があります。

(または)

修正:
def baseXML = new XmlSlurper(false,false).parseText(new File(stringXML).getText())

+0

どうもありがとうございました。 List_Wrapperノードが正常に追加されました。しかし、私はまた、ルートノードを追加する以外に、XML内の他のものを変更したくありません。しかし、現在、接頭辞「tag0」がXMLに追加されており、XML全体が変更されています。どうすればそれを避けることができますか? –

+0

@SayantaniRoyChaudhuri 'tag0'の問題を避けるために' xmlParser() 'を使ってxmlを解析します。 –

+0

@SayantaniRoyChaudhuriこの答えがあなたの問題を解決するとわかったら、それは答えとして受け入れられ、アップヴォートの対象となるべきです。 Learn https://stackoverflow.com/help/someone-answers –

関連する問題