XSLT: добавить атрибут к последнему заданному элементу изображения SVG - PullRequest
0 голосов
/ 08 февраля 2019

Как добавить атрибут stroke="red" к последнему вхождению тега circle?

Мой пример SVG выглядит следующим образом:

<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-900 -900 1800 1800" width="1800" height="1800">
<circle r="20" stroke="#343434" stroke-width="10"/>
<g stroke="#77868b" stroke-width="8" fill="none">
 <circle id="o4" r="600"/>
 <circle id="o5" r="700"/>
 <circle id="o6" r="800" />
 <g stroke-width="60" stroke-linecap="round" transform="rotate(90)">
  <circle id="e4" r="600" stroke-dasharray="1,116.75"/>
  <circle id="e5" r="700" stroke-dasharray="1,365.5"/>
  <circle id="e6" r="800" stroke-dasharray="1,2512.25"/>
 </g>
</g>
</svg>

Когда я использую следующееШаблон XSLT, я получаю три круга с stroke="red" вместо только последнего.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:svg="http://www.w3.org/2000/svg" version='1.0'>
    <!-- this template is applied by default to all nodes and attributes -->
    <xsl:template match="@*|node()">
        <!-- just copy all my attributes and child nodes, except if there's a better template for some of them -->
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- this template is applied to a path node that doesn't have a fill attribute -->
    <xsl:template match="svg:circle[not(@stroke)][last()]">
        <!-- copy me and my attributes and my subnodes, applying templates as necessary, and add a fill attribute set to red -->
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
            <xsl:attribute name="stroke">red</xsl:attribute>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

1 Ответ

0 голосов
/ 08 февраля 2019

Добавление g/ в мой шаблон следующим образом <xsl:template match="svg:g/circle[not(@stroke)][last()]"> исправило мою проблему.

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