XSLT: Удалить узел HTML, если атрибут и текстовое значение соответствуют условию - PullRequest
1 голос
/ 02 мая 2020

Я новичок в XSLT, и у меня есть задача удалить все <a> tags, которые имеют атрибут class="LinkSQL" и текстовое значение Source

Образец HTML

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <table>
            <thead>

            </thead>
            <tbody>
                <tr>
                    <td class="R">
                        <a class="LinkSQL" href="#">Source</a>
                    </td>
                    <td class="R">
                        <a class="LinkSQL" href="#">Media</a>
                    </td>
                    <td class="R">
                        <a class="LinkSQL" href="#">News</a>
                    </td>
                    <td class="R">
                        <a class="LinkSQL" href="#">Source</a>
                    </td>
                </tr>
            </tbody>    
        </table>
    </body>
</html> 

XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
  xpath-default-namespace="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*" />

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="a[@class='LinkSQL']|LinkSQL" />

</xsl:stylesheet>

Я ожидаю удаления этих завершенных блоков <a class="LinkSQL" href="#">Source</a>. Мой xslt удаляет все теги <a>. Цените любые отзывы

Ожидаемый результат.

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        <table>
            <thead>

            </thead>
            <tbody>
                <tr>
                    <td class="R">
                        <a class="LinkSQL" href="#">Media</a>
                    </td>
                    <td class="R">
                        <a class="LinkSQL" href="#">News</a>
                    </td>
                </tr>
            </tbody>    
        </table>
    </body>
</html> 

1 Ответ

1 голос
/ 02 мая 2020

удалить все <a> теги, имеющие атрибут class="LinkSQL" и текстовое значение Source

Это будет:

<xsl:template match="a[@class='LinkSQL'][.='Source']" />

или:

<xsl:template match="a[@class='LinkSQL' and .='Source']" />

Обратите внимание, что в вашей таблице стилей написано version="1.0", но xpath-default-namespace требует XSLT 2.0.

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