我是XSLT的新手(并没有广泛的XML经验),而且我正在努力解决这个问题。
我有一个由ValidationResultType(处于三种状态之一),消息和同一类的N个子列表组成的类。然后将其序列化为XML,以便生成以下XML:
<ChildErrors>
<ErrorCarrier>
<Message>Sheet 'So and so' had 3 warning(s)</Message>
<ChildErrors>
<ErrorCarrier>
<Message>Row 1 had 1 warning(s)</Message>
<ChildErrors>
<ErrorCarrier>
<ChildErrors>
<ErrorCarrier>
<Message>Some warning</Message>
<ValidationResultType>Warning</ValidationResultType>
</ErrorCarrier>
</ChildErrors>
<ValidationResultType>Warning</ValidationResultType>
</ErrorCarrier>
</ChildErrors>
<ValidationResultType>Warning</ValidationResultType>
</ErrorCarrier>
<ErrorCarrier>
<Message>Row 3 had 1 warning(s)</Message>
<ChildErrors>
<ErrorCarrier>
<ChildErrors>
<ErrorCarrier>
<Message>Some warning</Message>
<ValidationResultType>Warning</ValidationResultType>
</ErrorCarrier>
</ChildErrors>
<ValidationResultType>Warning</ValidationResultType>
</ErrorCarrier>
</ChildErrors>
<ValidationResultType>Warning</ValidationResultType>
</ErrorCarrier>
<ErrorCarrier>
<Message>Row 6 had 1 warning(s)</Message>
<ChildErrors>
<ErrorCarrier>
<ChildErrors>
<ErrorCarrier>
<Message>Some Warning'</Message>
<ValidationResultType>Warning</ValidationResultType>
</ErrorCarrier>
</ChildErrors>
<ValidationResultType>Warning</ValidationResultType>
</ErrorCarrier>
</ChildErrors>
<ValidationResultType>Warning</ValidationResultType>
</ErrorCarrier>
</ChildErrors>
<ValidationResultType>Warning</ValidationResultType>
</ErrorCarrier>
</ChildErrors>
<ValidationResultType>Warning</ValidationResultType></ErrorCarrier>
我想要的是具有这些错误的树视图,以及ValidationResultType上的条件格式。如果它是一个失败,那么它的红色,如果它是一个警告,那么蓝色,如果成功则没有。
我到目前为止的XSLT是:
<table border="1">
<tr bgcolor="#9acd32">
<th>Message</th>
</tr>
<xsl:for-each select="ErrorCarrier/ChildErrors/ErrorCarrier">
<tr>
<xsl:choose>
<xsl:when test="ErrorCarrier/ChildErrors/ErrorCarrier/ValidationResultType='Success'">
<td bgcolor="#ff00ff">
<xsl:value-of select="Message"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="Message"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
它不按照我想要的方式工作,而且我迄今为止所有谷歌搜索的尝试都没有产生任何有用的结果。任何人都可以帮助我朝着正确的方向前进吗?
答案 0 :(得分:1)
当您调用<xsl:for-each>
时,您循环的节点将成为上下文节点。
这意味着您当前的代码正在寻找不存在的节点。 (ErrorCarrier/ChildErrors/ErrorCarrier/ErrorCarrier/ChildErrors/ErrorCarrier/ValidationResultType
)