问题
I have a requirement to remove parent xml nodes and copy entire xml inside node. I have written a xslt code it, however, it is not working as expected.
Input XML:
<ns0:Messages xmlns:ns0="http://sap.com/xi/XI/SplitAndMerge">
<ns0:Message1>
<ns3:Response xmlns:ns3="urn:enoc.com:HTRUAE:EmployeeLeavesData_Portal">
<EmployeeLeave>
<EmployeeID>100064</EmployeeID>
<EmployeeAbsenceDays>1</EmployeeAbsenceDays>
</EmployeeLeave>
<EmployeeLeave>
<EmployeeID>100065</EmployeeID>
<EmployeeAbsenceDays>1</EmployeeAbsenceDays>
</EmployeeLeave>
</ns3:Response>
</ns0:Message1>
</ns0:Messages>
XSLT mapping:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<Response xmlns:ns3="urn:enoc.com:HTRUAE:EmployeeLeavesData_Portal">
<xsl:copy-of select="Messages/Message1/Response/EmployeeLeave" />
</Response>
</xsl:template>
</xsl:stylesheet>
Output that I am getting:
<?xml version="1.0" encoding="UTF-8"?>
<Response xmlns:ns3="urn:enoc.com:HTRUAE:EmployeeLeavesData_Portal" />
expected output:
<ns3:Response xmlns:ns3="urn:enoc.com:HTRUAE:EmployeeLeavesData_Portal">
<EmployeeLeave>
<EmployeeID>100064</EmployeeID>
<EmployeeAbsenceDays>1</EmployeeAbsenceDays>
</EmployeeLeave>
<EmployeeLeave>
<EmployeeID>100065</EmployeeID>
<EmployeeAbsenceDays>1</EmployeeAbsenceDays>
</EmployeeLeave>
</ns3:Response>
回答1:
In XSLT 2 or 3 you can use
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:template match="/">
<xsl:copy-of select="//ns3:Response" copy-namespaces="no" xmlns:ns3="urn:enoc.com:HTRUAE:EmployeeLeavesData_Portal"/>
</xsl:template>
</xsl:stylesheet>
来源:https://stackoverflow.com/questions/65822982/xslt-output-not-as-expected