XSLT映射多组email-addresses到不同节点仅返回首个值问题求助
问题排查与解决方案
错误原因
- 节点名拼写错误:源XML中邮箱节点名为
email-addresses,你的XPath写为email-address,缺少末尾的s - XPath取值逻辑错误:直接使用路径取值时,默认会返回匹配到的第一个节点的内容,不会和你判断的type属性自动对应
- 语法错误:
xsl:value of写法错误,正确应为xsl:value-of,中间需要加连字符
正确实现代码
写法1:循环遍历适配多场景(推荐)
适合后续可能新增其他邮箱类型的场景,扩展性更强:
<output> <xsl:for-each select="Input/email-addresses"> <xsl:choose> <xsl:when test="type='work'"> <emailwork> <xsl:value-of select="value"/> </emailwork> </xsl:when> <xsl:when test="type='personal'"> <emailper> <xsl:value-of select="value"/> </emailper> </xsl:when> </xsl:choose> </xsl:for-each> </output>
写法2:保留原if逻辑修改版
适合固定只有工作、个人两种邮箱类型的场景:
<output> <xsl:if test="Input/email-addresses[type='work']"> <emailwork> <xsl:value-of select="Input/email-addresses[type='work']/value"/> </emailwork> </xsl:if> <xsl:if test="Input/email-addresses[type='personal']"> <emailper> <xsl:value-of select="Input/email-addresses[type='personal']/value"/> </emailper> </xsl:if> </output>
内容的提问来源于stack exchange,提问作者sivakumar kala
相关产品推荐
相关产品推荐

