Могу ли я указать пространство имен по умолчанию в моей таблице стилей XSL для каждого созданного элемента? - PullRequest
1 голос
/ 10 сентября 2009

Я использую .NET для преобразования XML из DataSet в формат sitemap . Вот где я сейчас нахожусь. Как видите, я создаю корневой элемент с правильным пространством имен. Я заметил, что если я создал дочерние узлы, они все получили пустой атрибут 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>

Спасибо!

1 Ответ

2 голосов
/ 10 сентября 2009

Укажите пространство имен по умолчанию в корне таблицы стилей.

<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>
...