我可以在 XSL 样式表中为创建的每个元素指定默认名称空间吗?

发布于 2024-08-04 07:30:24 字数 1107 浏览 3 评论 0原文

我正在使用 .NET 将 XML 从数据集转换为 sitemap 格式。这就是我现在所处的位置。如您所见,我使用正确的命名空间创建了根元素。我注意到,如果我创建了子节点,它们都会得到一个空的 xmls 属性 (...),除非我指定了命名空间我在模板中创建元素。

不是很干。有没有办法定义创建的所有元素的名称空间?

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

谢谢!

I am using .NET to transform XML from a DataSet to the sitemap format. Here is where I am at right now. As you can see, I create the root element with the correct namespace. I noticed that if I created child nodes, they all got an empty xmls-attribute (<url xmlns="">...</url>), unless I specified the namespace when I create the element in the template.

It's not very DRY. is there a way to define the namespace of alle elements that are created?

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

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

何其悲哀 2024-08-11 07:30:24

指定样式表根目录上的默认命名空间。

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

Specify the default namespace on the root of the stylesheet.

<xsl:stylesheet version="1.0" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Or, in my opinion a preferred solution, define a prefix on the root and use it later for your elements:

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文