问问题
490 次
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 回答