Oto jak można to zrobić:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
exclude-result-prefixes="xsi">
<xsl:output omit-xml-declaration="yes"/>
<!-- -->
<xsl:template match="/">
<exercises xsi:noNamespaceSchemaLocation="mySchema.xsd"/>
</xsl:template>
</xsl:stylesheet>
Gdy ta transformacja jest stosowana na dowolnym dokumencie źródło XML (nie używany), przy czym poszukiwanych wynik jest produkowany:
<exercises xsi:noNamespaceSchemaLocation="mySchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
Nie jest konieczne stosowanie <xsl:attribute>
w twoim przypadku, jednak w razie potrzeby można z niego bez problemu korzystać:
<xsl:attribute name="xsi:noNamespaceSchemaLocation">
<xsl:value-of select="'mySchema.xsd'"/>
</xsl:attribute>
Należy pamiętać, że jest to dobra praktyka, aby po prostu określić niezbędne nazw w elemencie tak <xsl:stylesheet>
że mogą łatwo być (re) stosowany wszędzie tam, gdzie są potrzebne. Jest to szczególnie przydatne, jeśli dany obszar nazw będzie potrzebny na więcej niż jednym wygenerowanym elemencie lub atrybucie.
W tym przypadku jest to również dobre określić wszystkie takie przedrostki wartości atrybutuexclude-result-prefixes
tak, że przestrzenie nazw nie zostaną automatycznie propagowane na wszystkich dosłownych elementów wynikowych.
Którego parsera XSLT używasz? – Kev