Могу ли я указать пространство имен по умолчанию в моей таблице стилей XSL для каждого созданного элемента?
Вопрос
Я использую .NET для преобразования XML из набора данных в карта сайта формат.Вот где я сейчас нахожусь.Как видите, я создаю корневой элемент с правильным пространством имен.Я заметил, что если я создавал дочерние узлы, все они получали пустой атрибут xmls (<url xmlns="">...</url>
), если только я не указал пространство имен при создании элемента в шаблоне.
Это не очень СУХО.Есть ли способ определить пространство имен всех создаваемых элементов?
<xsl:template match="/">
<!-- Root element has a namespace -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<xsl:apply-templates/>
</urlset>
</xsl:template>
<xsl:template match="Document">
<!-- Do it this way to prevent empty xmlns attribute on element -->
<xsl:element name="url" namespace="http://www.sitemaps.org/schemas/sitemap/0.9">
<!-- This element will get the empty xmlns attribute, unless I create it like the url element -->
<location>
<xsl:value-of select="Path" />
</location>
<!-- There are more elements to create here, do I have to specify the namespace each time? -->
</xsl:element>
</xsl:template>
Спасибо!
Решение
Укажите пространство имен по умолчанию в корне таблицы стилей.
<xsl:stylesheet version="1.0" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Или, на мой взгляд, предпочтительное решение — определить префикс в корне и использовать его позже для своих элементов:
<xsl:stylesheet version="1.0" xmlns:sm="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<sm:urlset>
<xsl:apply-templates/>
</sm:urlset>
</xsl:template>
Не связан с StackOverflow