在groovy或Java脚本中将属性lang转换为xml:lang

时间:2017-03-09 05:36:20

标签: xml groovy

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

请帮我分享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 个答案:

答案 0 :(得分: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': root.Forecast.ForecastQuantity.name.@lang[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>