初学者的XSLT问题:基于XML结构中其他位置的值选择节点

初学者的XSLT问题:基于XML结构中其他位置的值选择节点,xml,xslt,xpath,Xml,Xslt,Xpath,-为清晰起见进行了编辑 我有一个XML文件,看起来像这样: <questionBlock> <responses> . . . <response> <degree>1</degree> <instdegree>1</instdegree> </response> . . . </responses&g

-为清晰起见进行了编辑

我有一个XML文件,看起来像这样:

<questionBlock>
    <responses>
      . . .
      <response>
        <degree>1</degree>
        <instdegree>1</instdegree>
      </response>
      . . .
   </responses>
   <question>
      <variable>degree</variable>
      <text>Please select a degree or credential you have pursued.</text>
      <responses>
        <response>
          <label>High School Diploma</label>
          <value>1</value>
        </response>
        <response>
          <label>Certificate</label>
          <value>2</value>
        </response>
      </responses>
      . . .
   </question>
</questionBlock>
XSLT的一个子集如下所示: 除了选择学位1的值之外,我还希望能够基于该值选择高中文凭,但我还无法通过XPath在一般情况下实现这一点,例如,如果学位等于2


任何帮助都将不胜感激。谢谢。

编辑:我想你是说这样的事吧

<xsl:for-each select="responses/response">
  <xsl:variable name="degree" select="degree" />    
  <xsl:variable name="degree-response" select="
    ../question[variable = 'degree']/responses/response[value = $degree]
  " />
  <xsl:value-of select="$degree-response/label" />
</xsl:for-each>
或简称:

../following-sibling::responses[1]/response[1]/label

编辑:我想你是指这样的事情吧

<xsl:for-each select="responses/response">
  <xsl:variable name="degree" select="degree" />    
  <xsl:variable name="degree-response" select="
    ../question[variable = 'degree']/responses/response[value = $degree]
  " />
  <xsl:value-of select="$degree-response/label" />
</xsl:for-each>
或简称:

../following-sibling::responses[1]/response[1]/label

xpath:../../responses[response=current]/label

xpath:../../responses[response=current]/label

选择并查看是什么意思?您的意思是希望在从degree元素返回值时按label元素进行过滤吗?条件和反应的父元素是什么?很抱歉,这个问题最初是模糊的,在我写它的时候,它在我的头脑中是有意义的。我真的需要能够根据/问题/回答的价值做出决定,而不仅仅是职位。我的解决方案对你的问题不起作用?这不是基于节点位置,我认为您应该再次澄清,这仍然令人困惑。你在一个/问题栏/回答/回答中,想要选择高中文凭,因为这是一个与当前相同的文凭?你所说的选择和查看是什么意思?您的意思是希望在从degree元素返回值时按label元素进行过滤吗?条件和反应的父元素是什么?很抱歉,这个问题最初是模糊的,在我写它的时候,它在我的头脑中是有意义的。我真的需要能够根据/问题/回答的价值做出决定,而不仅仅是职位。我的解决方案对你的问题不起作用?这不是基于节点位置,我认为您应该再次澄清,这仍然令人困惑。你在一个/问题栏/回答/回答中,想要选择高中文凭,因为那是一个与当前相同的文凭?谢谢,托马拉克。当然,你说得很对,每个人都要避免。XSLT是由一名初级程序员编写的,他没有任何函数式编程经验,我需要快速修复它以解决问题。我真的需要回去重构整件事。谢谢你,托玛拉克。当然,你说得很对,每个人都要避免。XSLT是由一名初级程序员编写的,他没有任何函数式编程经验,我需要快速修复它以解决问题。我真的需要回去重构整件事。