如何在XSLT中访问<Any>元素?附场景与尝试代码
解决方案
你之前的XSLT模板匹配语法存在错误,match属性需要指定节点路径或匹配模式,不能直接写入条件表达式。结合你的需求以及XSD中xsd:any允许扩展元素的特性,以下是两种可行的实现方案:
方案一:根节点模板内判断输出
直接匹配文档根节点,通过xsl:if判断lastName的值是否为"Musk",满足条件时输出"Tesla":
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:if test="Person/Name/lastName = 'Musk'"> <text>Tesla</text> </xsl:if> </xsl:template> </xsl:stylesheet>
方案二:匹配符合条件的节点输出
先匹配根节点并触发子节点处理逻辑,再专门匹配值为"Musk"的lastName节点来输出内容:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:apply-templates select="Person/Name/lastName[. = 'Musk']"/> </xsl:template> <xsl:template match="lastName[. = 'Musk']"> <text>Tesla</text> </xsl:template> </xsl:stylesheet>
补充说明
XSD中的<Any>(即xsd:any)允许在Person节点下添加未预定义的扩展元素(比如你XML中的Name),XSLT处理这类扩展元素时,直接使用常规的节点路径即可访问,无需特殊配置,只要路径正确就能定位到lastName节点。
内容的提问来源于stack exchange,提问作者navi
相关产品推荐
相关产品推荐

