Преобразование атрибутов с помощью xslt - PullRequest
0 голосов
/ 04 июля 2019

Это второй день, когда я использую XSLT, поэтому я новичок.И теперь я хочу использовать свои атрибуты в вычислениях.

XML, который я хочу редактировать, выглядит следующим образом:

<position x="106" y="47" zIndex="6" width="30" height="5"/>
<position x="106" y="56" zIndex="7" width="30" height="5"/>
<position x="106" y="66" zIndex="8" width="30" height="5"/>
<position x="106" y="75" zIndex="9" width="30" height="5"/>

Мой XSLT-код выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="@x[parent::position]">
        <xsl:attribute name="x">
            <xsl:value-of select="sum((@x, 1000))"/>
        </xsl:attribute>
    </xsl:template>
</xsl:stylesheet>

Итак, в этом примере кода я хотел увеличить атрибут x на 1000, но он просто был установлен на 1000. РЕДАКТИРОВАТЬ: я хочу иметь возможность использовать по крайней мере все числовые вычисления и условия (которые относятся к текущемузначение х) как: ==;!=;>=;=<;...

1 Ответ

1 голос
/ 04 июля 2019

Вы хотите получить следующее выражение ...

<xsl:value-of select="sum((., 1000))"/>

Где . представляет текущее совпадение (атрибут x).Выполнение @x будет искать атрибут x для текущего атрибута x, который не будет существовать.

Хотя, сказав это, вы можете просто сделать это в этом случае ....

<xsl:value-of select=". + 1000"/>

Обратите внимание, что вы также можете упростить сопоставление с шаблоном, например:

<xsl:template match="position/@x">
    <xsl:attribute name="x">
        <xsl:value-of select=". + 1000"/>
    </xsl:attribute>
</xsl:template>

И если вы действительно используете XSLT 2.0, вы можете упростить его еще больше, до этого:

<xsl:template match="position/@x">
    <xsl:attribute name="x" select=". + 1000"/>
</xsl:template>

Обратите внимание, чтобы добавить условие к совпадению, используйте квадратные скобки, например ...

<xsl:template match="position/@x[. &lt; 1000]">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...