Установка переключателя для отправки ответа в XSL - PullRequest
1 голос
/ 09 января 2012

Я создаю мастер вопросов и ответов, который использует xsl для генерации html и отправляет обратно с использованием ajax. Я слишком долго смотрел на эту проблему и надеюсь, что свежие глаза помогут обнаружить мой пробел!

Параметры вывода в порядке, но возникают проблемы при настройке ранее представленного ответа. Если я сделаю следующее, совпадение не произойдет, и, следовательно, не будет выбран ни один переключатель. Преобразование на стороне сервера в asp.net, поскольку механизмы сравнения могут немного отличаться.

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

Если у меня есть следующее (жестко запрограммированное в одном из руководств, оно работает. Не уверен, тогда каков был бы вышеуказанный путь для его исправления?

<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 Ответ

1 голос
/ 09 января 2012

В общем, получите ссылку на текущий узел контекста, используя функцию current():

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

Или, используя относительный путь, например:

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

Evenлучше сохранить ссылку на текущий вопрос, что позволит вам записать путь без возврата к дереву документа:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...