我正在努力绕过xslt …试图转换下面的xml:
<employees> <employee> <employeeNumber>1234</employeeNumber> <startdate>01/02/2003</startdate> <activeFlag>true</activeFlag> <firstname>Erik</firstname> <address> <addressline1>123 Main</addressline1> <zip>07016</zip> <state>New Jersey</state> <city>My City</city> </address> </employee> </employees>
进入这个(即取出activeFlag标签值并将其放入employee标签的属性中).
<employees> <employee active="true"> <employeeNumber>1234</employeeNumber> <startdate>01/02/2003</startdate> <firstname>Erik</firstname> <address> <addressline1>123 Main</addressline1> <zip>07016</zip> <state>New Jersey</state> <city>My City</city> </address> </employee> </employees>
我尝试了以下XSLT,但它什么也没做:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="employees/employee"> <employee active="{activeFlag}"/> </xsl:template> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
有任何想法吗?
解决方法
这个简短而简单(没有明确的条件指令)转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="employee"> <employee active="{activeFlag}"> <xsl:apply-templates select="node()|@*"/> </employee> </xsl:template> <xsl:template match="activeFlag"/> </xsl:stylesheet>
当应用于提供的XML文档时:
<employees> <employee> <employeeNumber>1234</employeeNumber> <startdate>01/02/2003</startdate> <activeFlag>true</activeFlag> <firstname>Erik</firstname> <address> <addressline1>123 Main</addressline1> <zip>07016</zip> <state>New Jersey</state> <city>My City</city> </address> </employee> </employees>
产生想要的,正确的结果:
<employees> <employee active="true"> <employeeNumber>1234</employeeNumber> <startdate>01/02/2003</startdate> <firstname>Erik</firstname> <address> <addressline1>123 Main</addressline1> <zip>07016</zip> <state>New Jersey</state> <city>My City</city> </address> </employee> </employees>
说明:覆盖identity rule,使用AVT.
如果你想正确处理没有activeFlag子元素的情况,它会变得稍微复杂一些:
<xsl:template match="employee"> <employee active= "{concat(activeFlag,substring('false',1 div not(activeFlag)) ) }"> <xsl:apply-templates select="node()|@*"/> </employee> </xsl:template>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。