我需要将父节点插入到现有的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>
需要帮助解决这个问题。
答案 0 :(得分:0)
代码中的行:
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())