XSLT 2.0 模板匹配 - 剥离所有不在所需命名空间中的属性

发布于 2024-12-21 14:14:03 字数 783 浏览 2 评论 0原文

我有一个具有不同命名空间属性的 XML - 它基本上是一种扩展的 XHTML。我想转储所有非 xhtml 命名空间属性。

示例源 XML:

<html>
  <body>
    <p class="test" xy:foo="true">blah</p>
  </body>
</html>

目前,我有以下 XSLT 模板:

<xsl:template match="@*">
    <xsl:choose>
        <xsl:when test='namespace-uri()="http://www.w3.org/1999/xhtml"'><xsl:copy-of select="."/></xsl:when>
        <xsl:otherwise></xsl:otherwise>
    </xsl:choose>
</xsl:template>

所需的输出 XML:

<html>
  <body>
    <p class="test">blah</p>
  </body>
</html>

但它似乎不匹配,因为我得到的输出 XML 完全没有属性。我感觉 namespace-uri() 没有按预期工作。有什么想法吗?

I have an XML with differently namespaced attributes - it's basicly a kind of extended XHTML. I want to dump all the non-xhtml namespaced attributes.

Examplary source XML:

<html>
  <body>
    <p class="test" xy:foo="true">blah</p>
  </body>
</html>

At the moment, i have the following XSLT template:

<xsl:template match="@*">
    <xsl:choose>
        <xsl:when test='namespace-uri()="http://www.w3.org/1999/xhtml"'><xsl:copy-of select="."/></xsl:when>
        <xsl:otherwise></xsl:otherwise>
    </xsl:choose>
</xsl:template>

Desired output XML:

<html>
  <body>
    <p class="test">blah</p>
  </body>
</html>

But it doesn't seem to match, because i get an output XML completely without attributes. I have the feeling that namespace-uri() does not work as expected. Any ideas?

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

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

发布评论

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

评论(1

可是我不能没有你 2024-12-28 14:14:03

XHTML 元素上的属性(如您的 class 元素)是无命名空间中的属性,而不是 XHTML 命名空间中的属性。所以使用

<xsl:template match="@*[namespace-uri() != '']"/>

加上身份转换模板。

The attributes on XHTML elements (like your class one) are attributes in no namespace, not in the XHTML namespace. So use

<xsl:template match="@*[namespace-uri() != '']"/>

plus the identity transformation template.

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