我想弄清楚如何在(节点)
中执行与if exists
类似的操作
我有以下xml和xls我试图比较联系人/传记/标志中是否存在可用的标志@id
<availableflags>
<flag id="happy">Happy</flag>
<flag id="curious">Curious</flag>
<flag id="busy">Busy</flag>
<flag id="expert">Expert</flag>
<flag id="client">Client</flag>
<flag id="manager">Manager</flag>
</availableflags>
<contact>
<biographical>
<age>33</age>
<flags>
<flag>happy</flag>
<flag>expert</flag>
</flags>
</biographical>
<contact>
XLS
<xsl:if test="@id=contact/biographical/flags/@flag">
<input type="checkbox" checked="checked"> <xsl:text>{contact/biographical/flags/@flag}</xsl:text>
</input>
</xsl:if>
我尝试了if语句的不同变体,但没有运气。
答案 0 :(得分:1)
如果您当前的上下文是flag
元素,那么您需要稍微向上导航树以到达contact
元素。此外,联系人部分中的flag
是一个元素,而不是属性
<xsl:if test="@id=../../contact/biographical/flags/flag">
<input type="checkbox" checked="checked">
<xsl:value-of select="." />
</input>
</xsl:if>
但更一般地说,看起来你正试图为每个可用标志渲染复选框,只选中选中的标志。在这种情况下,将属性设置为条件而不是整个元素会更容易:
<input type="checkbox">
<xsl:if test="@id=../../contact/biographical/flags/flag">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:if>
<xsl:value-of select="." />
</input>