使用 groovy 脚本或 xslt 删除 xml 版本和其他标签

remove xml version and other tag using groovy script or xslt

我需要从 XML 中删除 XML 版本标签和根标签。为此,我编写了一个 groovy 脚本。 但是它没有按预期工作。

输入:

<?xml version="1.0" encoding="UTF-8"?>
<ns1:Response xmlns:ns1="urn:enoc.com:HTRUAE:EmployeeMasterData_Portal">
  <Employee>
    <EmployeeId>1234</EmployeeId>
  </Employee>
</ns1:Response>

Groovy代码-responseOriginal包含传入XML:

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import java.lang.Object;
import java.lang.String;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.text.ParsePosition;

Message processData(Message message) {
  def properties = message.getProperties();
  def responseOriginal = properties.get("RESPONSE");
  String tempresponseTarget = responseOriginal.toString();
  String responseTarget = "";
  String bodyS = "<ns1:Response xmlns:ns1=\"urn:enoc.com:HTRUAE:EmployeeMasterData_Portal\">";
  String bodyE = "</ns1:Response>";
  responseTarget = tempresponseTarget.replaceAll("\<\?xml(.+?)\?\>", "").replaceAll(bodyS, "").replaceAll(bodyE, "").trim();
  message.setProperty("EMPRESPONSE", responseTarget);
  return message;
}

有人可以检查脚本并提出更改建议吗? 另外,是否可以使用 XSLT 删除它?

将 XSLT 2 或 3 与 Saxon 9 或 10 一起用于 Java,您可以使用

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    version="2.0">

    <xsl:output omit-xml-declaration="yes"/>
    
    <xsl:template match="/*">
        <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match="@* | node()">
        <xsl:copy copy-namespaces="no">
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
  
</xsl:stylesheet>