Обновление : ОП (@Ace) изменил свой вопрос и сообщает, что приведенное ниже преобразование создает некоторые новые дополнительные атрибуты.
Этот эффект связан с тем, что ониспользование <!DOCTYPE
и связанного DTD дает некоторые атрибуты по умолчанию для некоторых элементов.
Итак, ничего нового или удивительного!:)
Это всегда происходит, когда у вас есть инструкция <!DOCTYPE
, которая связывает DTD с документом, и когда это DTD имеет атрибуты по умолчанию.
Чтобы удалить атрибуты, если онине требуется, можно добавить соответствующие шаблоны с пустым телом. Однако имейте в виду, что это может сделать весь результат недействительным для DTD !
Это механическое переопределение правила идентификации:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"image/@href[starts-with(.,'./')
and not(starts-with(.,'./screenshots/'))
]">
<xsl:attribute name="href">
<xsl:value-of select="substring-after(substring-after(.,'./'), '/')"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="image/@href[starts-with(.,'./screenshots/')]">
<xsl:attribute name="href">
<xsl:value-of select="substring-after(.,'./')"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к следующему документу XML :
<t>
<image href="./folderx/screenshots/page1.png"/>
<image href="./screenshots/page2.png"/>
<image href="./views/screenshots/table/screenshots/page3.png"/>
</t>
желаемый результат получается :
<t>
<image href="screenshots/page1.png"></image>
<image href="screenshots/page2.png"></image>
<image href="screenshots/table/screenshots/page3.png"></image>
</t>