代码之家  ›  专栏  ›  技术社区  ›  Sayantani Roy Chaudhuri

使用Groovy向XML添加父节点

  •  0
  • Sayantani Roy Chaudhuri  · 技术社区  · 7 年前

    我需要在现有XML中插入父节点。我找到了如何向父节点添加子节点的示例,但没有找到向xml添加新根节点的示例。 我的源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应该如下所示:

    <?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>
    

    我是groovy新手。我的意思是这样做:

    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>
    

    需要帮助来解决这个问题。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Bhanuchander Udhayakumar    7 年前

    代码中的行:

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

    • Cars 是您的根节点。你不能这样说 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)) 避免 tag0 问题。

    (或)

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