Переменные XSLT и выбор / иначе не работает правильно - PullRequest
0 голосов
/ 02 декабря 2009

У меня есть XSLT, который выглядит так:

<xsl:choose>
    <xsl:when test="string(//User[@UserID = $UserID]/ROOT/Prop[@Nm = 'GreaseBoardCategory'])">
        <xsl:variable name="Type" select="concat('Documenter', //User[@UserID = $UserID]/ROOT/Prop[@Nm = 'GreaseBoardCategory'])"/>                         
    </xsl:when>
    <xsl:otherwise>
        <xsl:variable name="Type" select="concat('Documenter', user:GetUserType(string(//Payload/@SiteID), string(@UserID)))"/>                         
    </xsl:otherwise>
</xsl:choose>

И я хочу присвоить ему переменную с именем «Тип», которую я вижу из других примеров, что я должен делать это вместо этого:

<xsl:variable name="Type">
    <xsl:choose>
        <xsl:when test="string(//User[@UserID = $UserID]/ROOT/Prop[@Nm = 'GreaseBoardCategory'])">
            <xsl:value-of select="concat('Documenter', //User[@UserID = $UserID]/ROOT/Prop[@Nm = 'GreaseBoardCategory'])"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="concat('Documenter', user:GetUserType(string(//Payload/@SiteID), string(@UserID)))"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable>

Но моя переменная НЕ устанавливается. Он должен попасть в блок Otherwise, но никогда не попадет. Есть идеи? Ничего не установлено ..

Единственный способ получить тип для установки - отказаться от операторов Choose / When / Otherwise и просто выбрать один из двух вариантов, например:

<xsl:variable name="Type" select="concat('Documenter', //User[@UserID = $UserID]/ROOT/Prop[@Nm = 'GreaseBoardCategory'])"/>

например.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2009

Хорошо, я понял это. Проблема заключалась в том, как я обращался к переменной XSLT Type .. У меня изначально было:

<xsl:value-of select="user:InsertPerson($SiteID, $VisitGUID, $ID, $FirstName, $MiddleName, $LastName, $Address1, $Address2, $City, $State, $Zipcode, $Degree, $SSN, $Phone1, $Phone2, $Priority, $LogonCategory, $HospitalID, $DocumentCreateTime, $CoSigner, $Type, $Primary, $AddTime)" disable-output-escaping="yes"/>

Но затем я изменил "..., $Type, ..." на "..., string($Type), ...", и это исправило это. Я не уверен, почему из всех параметров, это единственный, который нужно было заключить в "string (...)", но это действительно решило проблему.

Спасибо за помощь всем!

0 голосов
/ 02 декабря 2009

xsl: выбор должен работать как положено. Я бы порекомендовал вам упростить ваш пример. Скажи

<xsl:value-of select="A"/>

в ветвлении when и т. П. Скажите «B» в другой ветке вместо ваших более сложных конкатенаций.

Наконец, как просили другие, покажите нам код, в котором вы оцениваете переменную «Тип», и ввод XML. Упоминание VBScript, вероятно, означает, что вы работаете с XSLT 1.0. Прошу просто убедиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...