2009-05-08 15 views
1

XSL変換を実行しようとしています。しかし、属性の置換は機能しません。私はこのXSLを持っています:XSLTの属性値を置換する

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output encoding="UTF-8" 
doctype-public="-//WAPFORUM//DTD WML 1.1//EN" 
doctype-system="http://www.wapforum.org/DTD/wml_1.1.xml"/> 

<xsl:template match="/"> 

<wml xml:lang="da"> 
<card id="FrontPage" title="{head/title}"> 
Why doesn't the title get inserted? 

<p id="changed">The server processed this Jan 1st. 2009.</p> 
</card></wml> 
</xsl:template></xsl:stylesheet> 

そして、変換されるXMLはXHTML 1.0 Transitionalドキュメントです。ドキュメントには当然html/head/title要素が含まれています。私は、カード要素のtitle属性に挿入されたタイトル要素のテキストコンテンツをしたい:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>DMI - The weather on Faroe Islands</title> 
(...) 

私はPHP 5.2.0とlibxsltのバージョン1.1.19を使用しています。

答えて

0

二つの問題があります:

<xsl:template match="/"> 
    <wml xml:lang="da"> 
    <card id="FrontPage" title="{html/head/title}"> 

ドキュメントルート( "/")が<html>要素ではありませんが。 の前に、<html>の要素があります。

DIVOが正しく指摘するようにまた、あなたは、XHTML名前空間が不足している:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:x="http://www.w3.org/1999/xhtml" 
    exclude-result-prefixes="x" 
> 

    <xsl:output 
    encoding="UTF-8" 
    doctype-public="-//WAPFORUM//DTD WML 1.1//EN" 
    doctype-system="http://www.wapforum.org/DTD/wml_1.1.xml" 
    /> 

    <xsl:template match="/"> 
    <wml xml:lang="da"> 
     <card id="FrontPage" title="{x:html/x:head/x:title}"> 
     <p id="changed">The server processed this Jan 1st. 2009.</p> 
     </card> 
    </wml> 
    </xsl:template> 
</xsl:stylesheet> 
0
/htmlにあなたのテンプレート一致表現を変更し

<xsl:template match="/html"> 
1

あなたはHTMLの名前空間宣言が欠落しています。次のことを試してください:あなたが好きなことを短いものにxhtmlからプレフィックスを変更する場合があり

<?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:output encoding="UTF-8" 
       doctype-public="-//WAPFORUM//DTD WML 1.1//EN" 
       doctype-system="http://www.wapforum.org/DTD/wml_1.1.xml" 
       indent="yes"/> 

    <xsl:template match="/"> 

    <wml xml:lang="da"> 
     <card id="FrontPage" title="{xhtml:html/xhtml:head/xhtml:title}"> 
     <p id="changed">The server processed this Jan 1st. 2009.</p> 
     </card> 
    </wml> 
    </xsl:template> 
</xsl:stylesheet> 

注意。

(これはおそらく一般的な誤解に基づいています):/は、文書の最上位ノード(html)と同じではない文書ルートを意味します。一番上のノードは「ルートノード」と呼ばれることが多く、正しくない。すなわち、/が一番上のノードと一致しない。したがって、xhtml:htmlをXPath式に追加する必要があります。

+0

名前空間の問題を発見するための+1。 – Tomalak

関連する問題