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" />
も、これは達成されません。
ご協力いただきありがとうございます!