XML / XSLT Stacked类条件树

时间:2018-02-13 12:38:49

标签: xml xslt

我是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>

它不按照我想要的方式工作,而且我迄今为止所有谷歌搜索的尝试都没有产生任何有用的结果。任何人都可以帮助我朝着正确的方向前进吗?

1 个答案:

答案 0 :(得分:1)

当您调用<xsl:for-each>时,您循环的节点将成为上下文节点。

这意味着您当前的代码正在寻找不存在的节点。 (ErrorCarrier/ChildErrors/ErrorCarrier/ErrorCarrier/ChildErrors/ErrorCarrier/ValidationResultType