2 に答える
名前空間と少し混同しているようです。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"
これで、タグを次のように一致させることができます:
<template match="h:a">
また、スパンは名前空間なしでは使用できません (xlst ではないため)。以下を使用できます。
<element name="span" namespace="http://www.w3.org/1999/xhtml">
<copy-of select="."/>
</element>
ただし、xslt には名前空間プレフィックスを使用することをお勧めします。
更新:「cta-button」を含む with class 属性の周りにのみスパンを設定するには:
<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">
作成したスタイルシートは、URI を含むデフォルトの名前空間を宣言しているhttp://www.w3.org/1999/XSL/Transform
ため、ソース データのどの名前空間の要素も参照できません。
基本的に、スタイルシートで使用しているすべての名前空間を指定する必要があります。そうしないと、使用している要素名が認識されません。a
たとえば、名前空間があります
ソース ドキュメントには 3 つの名前空間があり、スタイルシート (XSLT 自体用) には 1 つの名前空間があるため、変換は次のようなものから開始する必要があります。
<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>
これがお役に立てば幸いです。