2011-10-27 17 views
2

非常に単純なxsltを使ってhtmlページをxmlファイルに変換しています。XHTMLからXMLへのXSLT変換

しかし、出発点はそれほど簡単ではないと思います。私の最初の目標は<html>タグを<topic>タグに変換することです。

私は、次のXSLTをしました:

<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/"> 
    <xsl:apply-templates/> 
</xsl:template> 

<xsl:template match="html"> 
    <topic> 
    <xsl:text> Conversion Test</xsl:text> 
    </topic> 
</xsl:template> 

私は、このXSLTを実行した後、しかし、今、結果のXMLは、純粋に、元のhtmlページの同じ内容のある、それはI第三テンプレートマッチと思われます(<html>タグと一致するように)書き込まれたことは決して打たれません。

ソースHTMLは次のようになります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head>..</head> 
    <body>...</body> 
</html> 

は、専門家は、ここで私を少し助けてもらえますか?

+0

あなたのhtmlの例を挙げることはできますか? (特に 'xmlns =" http://www.w3.org/1999/xhtml "のような名前空間) –

+0

@DevNull、ソースhtmlで私の質問を更新しました – Kevin

+0

ありがとうございました。良い質問+1 –

答えて

4

XSLT 1.0:

てみてください、あなたのxsl:stylesheetxmlns:x="http://www.w3.org/1999/xhtml"を追加しmatch="x:html"にあなたの一致を変更します。

XSLT 2.0:

を上記のいずれかの方法を使用するか、またはあなたのマッチ(ESに名前空間接頭辞を置き換える;:(あなたが欲しいものを選ぶことができますが、「X」を使用する必要はありません。注意してください) )を「*」(match="*:html")に設定します。 xsl:stylesheetxpath-default-namespace="http://www.w3.org/1999/xhtml"を追加することもできます。

+0

ありがとう、それは働いた!はい、HTMLは実際にxhtmlであり、提案された名前空間に入れた後、XSLT1.0を使用しています。:) – Kevin

+0

ソースドキュメントの性質も反映するようにタイトルを更新しました。 – Kevin

+1

@Kevin - あなたは大歓迎です。また、XML出力に名前空間が必要ない場合は、 'exclude-result-prefixes ="#all "を' xsl:stylesheet'に追加してください。 (注: '#all'を' x'で置き換えて 'x'を特に除外することができます。 –

0

最初のテンプレートを削除するか、すべてのノードをnode()に一致させるよりも具体的にすることをおすすめします。

+0

アイデンティティ変換を削除すると言っていますか? –

+0

@lkuty、私は最初のテンプレートを削除しようとしました。結果として得られるxmlは、単にマークアップのないテキストの大きなノードです。元のhtmlページのすべてのテキストが含まれています。 – Kevin

+0

私は間違っていました。最初のルールを3番目のルールの中から選択することができたと思っていましたが、要素とのマッチパターンのデフォルトの優先順位は 'node()'よりも大きく、問題にはなりませんでした。私はちょうどNSについて考えなかった。 – lkuty

0

XSLTの目的は、XML文書をXML文書に変換することです。 HTMLはXML文書ではありません。 XHTMLはXMLですが、実際はHTMLで再フォーマットされていますので、XSLTを使用して簡単にやりたいことがわかりません。

+0

今、あなたはタイトルを更新しています:)。これは私の問題を反映しています。 – Rob