如何在XSLT中不使用变量获取节点值并完成XML格式转换?
你编写的XSLT主要存在语法错误、路径错误、节点大小写未区分、模板触发逻辑断层几类问题,以下是无需使用变量、完全基于相对路径定位实现需求的正确XSLT代码:
实现逻辑说明:
- 直接通过层级相对路径定位节点,无需存储变量
- 区分原XML中大小写不同的
<pays>和<Pays>节点分别取值 - 修正所有语法错误和模板嵌套逻辑
<xsl:stylesheet extension-element-prefixes="dp apim" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/> <xsl:strip-space elements="*"/> <xsl:template match="documents"> <soapenv:Envelope> <soapenv:Header/> <soapenv:Body> <xsl:apply-templates select="document/locations/location/companies" /> </soapenv:Body> </soapenv:Envelope> </xsl:template> <xsl:template match="companies"> <empdetails> <details> <emptype> <xsl:value-of select="company/type"/> </emptype> <ID> <xsl:value-of select="company/empid"/> </ID> <!-- 取小写pays节点下的薪资值 --> <Payment> <xsl:value-of select="company/pays/pay/pay1"/> </Payment> <Payment2> <xsl:value-of select="company/pays/pay/pay2"/> </Payment2> <!-- 取大写Pays节点下的应缴值,你预期输出中的50k与原XML的2L不符,如需转换可在此处扩展逻辑,若要完全匹配预期直接写固定值50k即可 --> <dueperyr> <xsl:value-of select="company/Pays/pay/due"/> </dueperyr> <duemonth> <xsl:value-of select="company/Pays/pay/month"/> </duemonth> </details> </empdetails> </xsl:template> </xsl:stylesheet>
内容的提问来源于stack exchange,提问作者Pinky
相关产品推荐
相关产品推荐

