2017-12-13 3 views
0

기존 XML에 부모 노드를 삽입해야합니다. 부모 노드에 자식 노드를 추가하는 방법에 대한 예제를 발견했지만 xml에 새 루트 노드를 추가하는 방법은 없습니다. 내 소스 XML은Groovy를 사용하여 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> 

같은 것을 할 의미 : 그러나

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" ?> 
<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를 넣을 수 없습니다.

    사용 XmlParser()처럼은 다음과 같습니다 :

  • 당신은 1 업데이트

    def newXml = new groovy.xml.StreamingMarkupBuilder().bind { 
    
    List_Wrapper { 
    
        mkp.yield baseXML 
    
        } 
    } 
    println groovy.xml.XmlUtil.serialize(newXml) 
    

    , 그것은 당신의 요구 사항을 만족시킬 것, root.parent

이 코드를 시도 할 수 없습니다 ,
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' 문제를 피하기 위해 xml을 파싱하려면'XmlParser()'를 사용하십시오. –

+0

@SayantaniRoyChaudhuri이 대답이 당신의 문제를 해결했다는 것을 알게되면 대답으로 받아 들여 져야하고 upvote 자격이 있어야합니다. https://stackoverflow.com/help/someone-answers –

관련 문제