Как сравнить элемент XML с переменной XSL - PullRequest
0 голосов
/ 29 сентября 2010

Я использую xslt для преобразования XML-документа в HTML для использования в электронной почте.Мне нужно сравнить элементы xml с другим значением элемента xml, чтобы я знал, какой формат дать значение.По сути, у меня есть структура xml:

<main>
    <comparer>1</comparer>
    <items>
        <item>
            <name>blarg</name>
            <values>
                <value>1</value>
                <value>2</value>
            </values>
    </items>
</main>

Информация об элементе используется для построения таблицы:

<table>
    <tr>
        <td>blarg</td>
        <td>1</td>
        <td>2</td>
    </tr>
</table>

Что мне нужно сделать, это использовать xsl длясравните значения элемента со значением узла «Comparer» и, если они равны, выделите ячейку таблицы жирным шрифтом, в противном случае значение ячейки не выделено жирным шрифтом.Мне нужно сделать это без использования JavaScript, поэтому это должно быть сделано в XSL.Прямо сейчас я смотрю на использование переменной xsl: затем пытаюсь использовать xsl: когда делать сравнение.К сожалению, мне мало везет.Это то, с чем я только что начал играть для каждой строки таблицы:

<xsl:variable name="compare" select="//main/comparer" />

...    

<xsl:for-each select="value">
    <td>
        <xsl:choose>
            <xsl:when test=". = $compare">
                <b>
                    <xsl:value-of select="."/>
                </b>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="."/>.
            </xsl:otherwise>
        </xsl:choose>
    </td>
</xsl:for-each>

* Примечание : для краткости я пропустил большую часть xsl.Я просто пытаюсь сосредоточиться на своей проблеме.

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Я понял это после проб и ошибок.Ответ Алехандро кажется, что это сработает, но я не могу позволить себе роскошь реструктурировать xsl для использования шаблонов.Вот что я использовал для решения своей проблемы:

<xsl:variable name="compare" select="//main/comparer" />

...    

<xsl:for-each select="value">
    <td>
        <xsl:choose>
            <xsl:when test="contains(., $expireDate)">
                <b>
                    <xsl:value-of select="."/>
                </b>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="."/>.
            </xsl:otherwise>
        </xsl:choose>
    </td>
</xsl:for-each>
0 голосов
/ 29 сентября 2010

Эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="main">
        <table>
            <xsl:apply-templates select="items"/>
        </table>
    </xsl:template>
    <xsl:template match="item">
        <tr>
            <xsl:apply-templates/>
        </tr>
    </xsl:template>
    <xsl:template match="name|value">
        <td>
            <xsl:apply-templates/>
        </td>
    </xsl:template>
    <xsl:template match="value/text()[.=/main/comparer]">
        <b>
            <xsl:value-of select="."/>
        </b>
    </xsl:template>
</xsl:stylesheet>

Выход:

<table>
    <tr>
        <td>blarg</td>
        <td>
            <b>1</b>
        </td>
        <td>2</td>
    </tr>
</table>

Примечание : сопоставление с образцом и сравнение набора узлов.

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