0
4

2 回答 2

0

看起来你有点混淆了命名空间。您尝试避免使用 xlst 的前缀

 xmlns="http://www.w3.org/1999/XSL/Transform"

我不会那样做,但无论如何。
您的<a>标签是表单 xhtml 命名空间,因为

 <p xmlns="http://www.w3.org/1999/xhtml">

在你的 xml 中。

如果您尝试将 xslt 作为默认命名空间,则必须将 xhtml 的命名空间前缀添加到您的 xsl。

   xmlns:h="http://www.w3.org/1999/xhtml"

现在您可以将您的 a 标签与:

<template match="h:a">

此外,跨度不能在没有命名空间的情况下使用(因为它不是 xlst)。您可以使用:

<element name="span" namespace="http://www.w3.org/1999/xhtml">
        <copy-of select="."/>
</element>

但我建议为 xslt 使用命名空间前缀。

更新:要使跨度仅围绕包含“cta-button”的类属性,请使用:

<template match="h:a[@class[contains(.,'cta-button')]]">
    <element name="span" namespace="http://www.w3.org/1999/xhtml">
        <copy-of select="."/>
    </element>
</template>

样式表应如下所示:

<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" 
            xmlns:h="http://www.w3.org/1999/xhtml"
            exclude-result-prefixes="h"
            version="1.0">
于 2013-04-29T11:07:43.290 回答
0

您编写的样式表声明了一个默认名称空间,其 URI 为http://www.w3.org/1999/XSL/Transform,没有其他名称,因此您不能引用源数据中任何名称空间中的任何元素。

基本上,您需要在样式表中指定您正在使用的所有命名空间,否则您正在使用的元素名称将无法识别。a例如有一个命名空间

源文档中有三个命名空间,样式表中有一个(用于 XSLT 本身),因此您的转换应该以类似

<xsl:stylesheet version="1.0"
    xmlns:src="uuid:3f71252b-6e99-47f2-8906-ff4488c188a1"
    xmlns:htm="http://www.w3.org/1999/xhtml"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

htm:div此后,您可以使用etc将 HTML 节点与其他节点分开引用。

我试图整理你的 XSLT,但代码很糟糕,我无法理解match你的模板中巨大的模式应该意味着什么。可以说你应该能够a通过使用来匹配你想要影响的元素

<xsl:template match="htm:a[contains(@class, 'cta-button')]">
  <xsl:copy>
    <xsl:apply-templates select="@*"/>
    <htm:span>
      <xsl:value-of select="."/>
    </htm:span>
  </xsl:copy>
</xsl:template>

我希望这会有所帮助。

于 2013-04-29T11:07:43.020 回答