1

XSLを使用してXHTMLをXHTMLに変換しているときに、名前空間に問題があります。入力の例として考えてみましょう。

<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head><title>Test</title></head>
    <body>
        <p>Remove this</p>
    </body>
</html>

その場合、次の変換は機能しません(たとえば、を削除しません<p />)。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()" name="copy">
        <xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
    </xsl:template>

    <xsl:template match="p" />
</xsl:stylesheet>

しかし、これはします:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xhtml="http://www.w3.org/1999/xhtml">
    <xsl:template match="@*|node()" name="copy">
        <xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
    </xsl:template>

    <xsl:template match="xhtml:p" />
</xsl:stylesheet>

私の問題と質問は、XSLTを変更して、すべてのXHTML要素にプレフィックスを追加する必要がなく、それらと一致するようにするにはどうすればよいですか?私がこれまでに試したことから、のようなデフォルトの名前空間を追加して<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" />も、これは達成されません。

ご協力いただきありがとうございます!

4

1 に答える 1

1
How can I change the XSLT so that I do not have to add prefixes to all the XHTML elements and it still get to match them?

これは可能ですが、名前空間を定義し、この名前空間の要素を参照する際に接頭辞を使用することをお勧めします。

<xsl:template match="*[local-name()='p']" />

警告

local-name()この手法は、同じであるが異なる名前空間に2つの要素が存在することが保証されている場合にのみ安全です。

于 2012-10-05T13:31:19.717 に答える