2012-01-09 25 views
1

我正在構建一個使用xsl生成html並使用ajax發回的問題/回答嚮導。我盯着這個問題太久了,希望新鮮的眼睛能夠幫助我發現問題!將單選按鈕設置爲XSL提交的答案

我輸出問題選項好,但麻煩設置以前提交的答案。如果我做了以下事情,沒有匹配發生,因此沒有選擇單選按鈕。轉換是asp.net中的服務器端,因爲diff引擎可能有點不同。

<xsl:for-each select="Options/Option"> 
... 
<xsl:value-of select="/ExpertData/Answers//Answer[@QuestionGuid = ../../QuestionGuid]"> </xsl:value-of> 
... 
</xsl:for-each> 

如果我有以下的(硬編碼到GUID的它的作品。不知道又是什麼上述路徑將糾正的一個?

<xsl:value-of select="/ExpertData/Answers//Answer[@QuestionGuid = '450ea4d6-a2e8-e011-9787-2c27d71e99a6']"></xsl:value-of> 

的XML通用格式...

<?xml version="1.0" encoding="utf-8"> 
<ExpertData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<Questions> 
    <Question xsi:type="RelevantQuestion"> 
     <QuestionGuid>450ea4d6-a2e8-e011-9787-2c27d71e99a6</QuestionGuid> 
     <ItemGuid>440ea4d6-a2e8-e011-9787-2c27d71e99a6</ItemGuid> 
     <ElementGuid>f23ef2cc-9a1c-4833-995d-c7ddffec33fa</ElementGuid> 
     <QuestionText>Is the Classification Item relevent to this road section?</QuestionText> 
     <FieldType>Radio</FieldType> 
     <QuestionHelpText>Help text...</QuestionHelpText> 
     <Options> 
      <Option> 
       <OptionGuid>4b0ea4d6-a2e8-e011-9787-2c27d71e99a6</OptionGuid> 
       <OptionText>Yes</OptionText> 
       <IsDefault>false</IsDefault> 
      </Option> 
      <Option> 
       <OptionGuid>4c0ea4d6-a2e8-e011-9787-2c27d71e99a6</OptionGuid> 
       <OptionText>No</OptionText> 
       <IsDefault>false</IsDefault> 
      </Option> 
     </Options> 
     <ReliabilityOptions /> 
     <QuestionValidationList /> 
    </Question> 
    <Question> 
     <QuestionGuid>460ea4d6-a2e8-e011-9787-2c27d71e99a6</QuestionGuid> 
     <ItemGuid>440ea4d6-a2e8-e011-9787-2c27d71e99a6</ItemGuid> 
     <ElementGuid>f23ef2cc-9a1c-4833-995d-c7ddffec33fa</ElementGuid> 
     <QuestionText>Please select the road type</QuestionText> 
     <FieldType>Radio</FieldType> 
     <Options> 
      <Option> 
       <OptionGuid>4d0ea4d6-a2e8-e011-9787-2c27d71e99a6</OptionGuid> 
       <OptionText>2 lane undivided</OptionText> 
       <IsDefault>false</IsDefault> 
      </Option> 
      <Option> 
       <OptionGuid>4e0ea4d6-a2e8-e011-9787-2c27d71e99a6</OptionGuid> 
       <OptionText>2 lane divided</OptionText> 
       <IsDefault>false</IsDefault> 
      </Option> 
     </Options> 
     <ReliabilityOptions /> 
     <QuestionValidationList /> 
    </Question> 
</Questions> 
<Answers> 
    <Answer QuestionGuid="450ea4d6-a2e8-e011-9787-2c27d71e99a6"> 
     <AnswerValue>Yes</AnswerValue> 
     <ReliabilityOptionGuid xsi:nil="true" /> 
    </Answer> 
    <Answer QuestionGuid="460ea4d6-a2e8-e011-9787-2c27d71e99a6"> 
     <AnswerValue>2 lane undivided</AnswerValue> 
     <ReliabilityOptionGuid xsi:nil="true" /> 
    </Answer> 
</Answers> 
</ExpertData> 

回答

1

一般情況下,使用current()函數獲取當前上下文節點的參考:

/ExpertData/Answers/Answer 
    [@QuestionGuid=current()/../../QuestionGuid]/AnswerValue 

或者,使用相對路徑,像這樣:

../../../../Answers/Answer 
    [@QuestionGuid=current()/../../QuestionGuid]/AnswerValue 

更妙的是,保存到當前問題的參考允許你寫不回溯了文檔樹的路徑:

<xsl:template match="Question"> 
    <xsl:variable name="guid" select="QuestionGuid"/> 
    <xsl:for-each select="Options/Option"> 
     <xsl:value-of 
      select="../../../../Answers/Answer[@QuestionGuid=$guid]/AnswerValue"> 
     </xsl:value-of> 
    </xsl:for-each> 
</xsl:template> 
+0

謝謝,工作很好。驚訝我沒有使用更多的當前功能。 – 2012-01-09 22:37:59