У вас есть (как минимум) две проблемы:
- Пространства имен по умолчанию отличаются, поэтому совпадения шаблонов в XSL не будут работать. Либо сделайте их соответствующими, либо предоставьте явные префиксы пространства имен в таблице стилей.
- Значение выбора вернет текстовое значение элемента body, что, вероятно, не то, что вы хотите.
Если все, что вы пытаетесь сделать, это вывести часть SVG в виде SVG-документа, то выполните следующие действия:
- Google "XSL Identity Transform", чтобы понять, как сделать "глубокое копирование" со входа на выход.
- Добавьте тег
<xsl:output ...>
с атрибутами doctype-public
и doctype-system
, указывающими информацию типа документа, которую вы хотите вывести.
Это не проверено, но должно быть довольно близко. Вам нужно будет добавить информацию о типе документа:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:svg= "http://www.w3.org/2000/svg"
version="2.0">
<xsl:output method="xml" doctype-public="..." doctype-system="..."/>
<xsl:template match="/">
<xsl:apply-templates select="//svg:svg"/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>