如何比较节点属性与节点

时间:2015-06-26 10:56:33

标签: xml xslt

我想弄清楚如何在(节点)

中执行与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语句的不同变体,但没有运气。

1 个答案:

答案 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>