<?xml version="1.0" encoding="UTF-8"?>
<Emp:Employee xmlns:Emp="http://Emp.com">
<Emp:EmpName>XYZ</Emp:EmpName>
<Emp:EmpAddres>AAAA</Emp:EmpAddres>
<Det:EmpDetails xmlns:Det="http://Det.com">
<Det:EmpDesignation>SE</Det:EmpDesignation>
<Det:EmpExperience>4</Det:EmpExperience>
</Det:EmpDetails>
</Emp:Employee>
我只是想复制所有元素,包括命名空间但没有<Det:EmpExperience>4</Det:EmpExperience>
所以最终的输出应该是:
<?xml version="1.0" encoding="UTF-8"?>
<Emp:Employee xmlns:Emp="http://Emp.com">
<Emp:EmpName>XYZ</Emp:EmpName>
<Emp:EmpAddres>AAAA</Emp:EmpAddres>
<Det:EmpDetails xmlns:Det="http://Det.com">
<Det:EmpDesignation>SE</Det:EmpDesignation>
</Det:EmpDetails>
</Emp:Employee>
我用过
<xsl:template match='/'>
<xsl:copy-of select='@*[not(Det:EmpExperience)]'/>
</xsl:template>
它无法正常工作:-( ...这个PLZ的任何解决方案。
如何仅删除<Det:EmpExperience>
元素并复制其余元素,包括命名空间?
答案 0 :(得分:5)
试试这个(改编自here):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:Det="http://Det.com">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Det:EmpExperience"/>
</xsl:stylesheet>
第二个模板会覆盖identity transformation,空模板会使用您的匹配逻辑(选择Det:EmpExperience
个节点)。