在xsl:for-each之后获取标记值



我有以下XML:

<Order>
  <jobDetails>
    <Question>
      <QuestionNumber>1</QuestionNumber>
      <QuestionResponse>
        <Response>Value</Response>
      </QuestionResponse>
    </Question>
    <Question>
      <QuestionNumber>2</QuestionNumber>
      <QuestionResponse>
        <Response>AnotherValue</Response>
      </QuestionResponse>
    </Question>
  </jobDetails>
</Order>

如果问题编号为2,我将使用XSLT1.0来获取响应的值:我需要进一步查询它,并根据它的大小输出不同的值。

我试过这个:

<xsl:template match="Order">
  <xsl:for-each select="jobDetails/Question">
    <xsl:variable name="theSet" select="QuestionNumber[string(.)='2']" />
    <xsl:if test="$theSet">
      <xsl:when test="QuestionResponse/Response = 'Value'"><Response>SomeValue</Response></xsl:when> 
      <xsl:when test="QuestionResponse/Response = 'AnotherValue'"><Response>SomeOtherValue</Response></xsl:when>
    </xsl:if>
  </xsl:for-each>
</xsl:template>

但是XSLT不进行验证。

提前感谢您的帮助。

你似乎让这件事变得比它需要的更复杂。如果你想测试对问题#2的回答,你可以直接测试,而不需要经历所有其他问题:

<xsl:template match="/Order">
    <xsl:variable name="resp2" select="jobDetails/Question[QuestionNumber='2']/QuestionResponse/Response" />
    <response>
        <xsl:choose>
            <xsl:when test="$resp2='Value'">SomeValue</xsl:when>
            <xsl:when test="$resp2='AnotherValue'">SomeOtherValue</xsl:when>
        </xsl:choose>
    </response>
</xsl:template>

注意,这假设在整个XML中只有一个问题#2(您还没有回答我关于这个问题的问题)。否则,我们需要如何输出多个结果的说明。

相关内容

  • 没有找到相关文章

最新更新