下面是我需要在<employeeAddress>
<employeePersonalDeatails>
块的xml
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<employeeInfo xmlns="http://myweb.com">
<employeePersonalDetails>
<name>ABC</name>
<Age>29</Age>
<Sex>Male</Sex>
</employeePersonalDetails>
<employeeAddress>
<Address>345, 4th main</Address>
<country>LA</country>
<pincode>560037</pincode>
</employeeAddress>
</employeeInfo>
以下是移动<employeeAddress>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="http://myweb.com"
version="1.0">
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="//ns:employeePersonalDetails">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
<xsl:apply-templates select="//ns:employeeAddress"/>
</xsl:template>
</xsl:stylesheet>
以上xslt的输出会在<employeeAddress>
内移动<employeePersonalDeatails>
块。但这个操作是复制和粘贴。阻止遗留的<employeeAddress>
块位置相同。
输出:
<?xml version="1.0" encoding="utf-8"?>
<employeeInfo>
<employeePersonalDetails>
<name>ABC</name>
<Age>29</Age>
<Sex>Male</Sex>
</employeePersonalDetails><employeeAddress>
<Address>345, 4th main</Address>
<country>LA</country>
<pincode>560037</pincode>
</employeeAddress>
<employeeAddress>
<Address>345, 4th main</Address>
<country>LA</country>
<pincode>560037</pincode>
</employeeAddress>
</employeeInfo>
在上面的输出中,我们可以看到<employeeAddress>
是重复的。我是否需要再写一个xslt来删除<employeeAddress>
?或者这可以做同样的xslt。
答案 0 :(得分:1)
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="http://myweb.com">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="//ns:employeePersonalDetails">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates select="../ns:employeeAddress" mode="copy"/>
</xsl:element>
</xsl:template>
<xsl:template mode="copy" match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="ns:employeeAddress"/>
</xsl:stylesheet>
应用于提供的XML文档:
<employeeInfo xmlns="http://myweb.com">
<employeePersonalDetails>
<name>ABC</name>
<Age>29</Age>
<Sex>Male</Sex>
</employeePersonalDetails>
<employeeAddress>
<Address>345, 4th main</Address>
<country>LA</country>
<pincode>560037</pincode>
</employeeAddress>
</employeeInfo>
生成想要的正确结果:
<employeeInfo>
<employeePersonalDetails>
<name>ABC</name>
<Age>29</Age>
<Sex>Male</Sex>
<employeeAddress>
<Address>345, 4th main</Address>
<country>LA</country>
<pincode>560037</pincode>
</employeeAddress>
</employeePersonalDetails>
</employeeInfo>
解释:“在匿名模式下删除”employeeAddress
,以命名模式处理它。