2017-03-09 40 views
1

我在xml中获得应该转换为“xml:lang”的属性“lang”,其他元素和属性保持不变,并且还将DOCTYPE标记添加为第二行。我需要使用SAP HANA集成平台中的代码。在groovy或Java脚本中将属性lang转换为xml:lang

请帮我分享Groovy或JavaScript代码以达到上述目的。

例如:输入

<?xml version="1.0" encoding="UTF-8"?> 
    <root> 
    <Description lang="en">TEST</Description> 
    <Forecast> 
    <Period endDate="2016-09-01T23:59:59+02:00" startDate="2016-09-01T00:00:00+02:00"/> 
    <ForecastQuantity quantity="34.0"> 
    <name lang="en">TEST1</name> 
    <UnitOfMeasure>EA</UnitOfMeasure> 
    </ForecastQuantity> 
    </Forecast> 
    </root> 

输出应该是:

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.029/cXML.dtd"> 
    <root> 
    <Description xml:lang="en">TEST</Description> 
    <Forecast> 
    <Period endDate="2016-09-01T23:59:59+02:00" startDate="2016-09-01T00:00:00+02:00"/> 
    <ForecastQuantity quantity="34.0"> 
    <name xml:lang="en">TEST1</name> 
    <UnitOfMeasure>EA</UnitOfMeasure> 
    </ForecastQuantity> 
    </Forecast> 
    </root> 

感谢

回答

1

您可以更改属性名称,如:

def startXml = """<?xml version="1.0" encoding="UTF-8"?> 
<root> 
<Description lang="en">TEST</Description> 
<Forecast> 
<Period endDate="2016-09-01T23:59:59+02:00" startDate="2016-09-01T00:00:00+02:00"/> 
<ForecastQuantity quantity="34.0"> 
<name lang="en">TEST1</name> 
<UnitOfMeasure>EA</UnitOfMeasure> 
</ForecastQuantity> 
</Forecast> 
</root>""" 

def parser = new XmlParser() 
def root = parser.parseText(startXml) 
root.Forecast.ForecastQuantity.name[0].replaceNode{ 
name('xml:lang': [email protected][0], 
    root.Forecast.ForecastQuantity.name[0].value()) 
} 

println XmlUtil.serialize(root) 

主要生产

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <Description lang="en">TEST</Description> 
    <Forecast> 
    <Period endDate="2016-09-01T23:59:59+02:00" startDate="2016-09-01T00:00:00+02:00"/> 
    <ForecastQuantity quantity="34.0"> 
     <name xml:lang="en">TEST1</name> 
    <UnitOfMeasure>EA</UnitOfMeasure> 
    </ForecastQuantity> 
    </Forecast> 
</root> 
+0

获取错误> groovy.lang.MissingMethodException:方法的无签名:)java.util.ArrayList.replaceNode(适用于参数类型:(SCRIPT1 $ _run_closure1)值:[SCRIPT1 $ _run_closure1 @ 25b31d24] 在Script1.run(Script1.groovy:15)\t(Script1.groovy:15) – Rao

+0

我使用https://groovyconsole.appspot.com/得到相同的错误,但工作正常,运行在intellij中使用2.4.6的脚本 –