2017-01-25 5 views
0

を働いていない私は、次のXMLコード(のtest.xml)持っている:XSL - のために、各

:次に

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="test.xsl" ?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
    <url>http://www.url.com/1/</url> 
    <url>http://www.url.com/2/</url> 
    <url>http://www.url.com/3/</url> 
</urlset> 

を、私は次のXSLコード(test.xsl)とそれにいくつかのスタイルを与えたいです

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Test</title> 
</head> 
<body> 
    <xsl:for-each select="/urlset/url"> 
     <div> 
      one address here (no matter which) 
     </div> 
    </xsl:for-each> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

何らかの理由で結果がありません。ちょうどblank pageです。

私はちょうど私のために働いた数年前に試したサンプルコードに従ったが、これは動作しません。

これを解決する方法はありますか?

+1

それはここ数#1 XSLTの質問です: "XSLTデフォルトネームスペース"を検索するだけです。誰かがほぼ毎日それを聞いています。 –

答えて

2

は、私はちょうど当時、あなたの入力文書が名前空間を持っていなかったので、コードはおそらく数年前に働いていた私

のために働いていた私は数年前にしようとしたサンプルコードを追いました。

入力ドキュメントには、という既定のネームスペースがあります。これは、XSLTスタイルシートで考慮する必要があります。 このネームスペースをスタイルシートに、接頭辞のすべての要素名を入力文書から再宣言すると、スタイルシートが機能します。

XSLTスタイルシート

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:stmp="http://www.sitemaps.org/schemas/sitemap/0.9"> 

<xsl:output method="xml" indent="yes"/> 

<xsl:template match="/"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Test</title> 
</head> 
<body> 
    <xsl:for-each select="/stmp:urlset/stmp:url"> 
     <div> 
      <xsl:value-of select="."/> 
     </div> 
    </xsl:for-each> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

XHTML出力

<?xml version="1.0" encoding="UTF-8"?> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:stmp="http://www.sitemaps.org/schemas/sitemap/0.9"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
     <title>Test</title> 
    </head> 
    <body> 
     <div>http://www.url.com/1/</div> 
     <div>http://www.url.com/2/</div> 
     <div>http://www.url.com/3/</div> 
    </body> 
</html> 

しかし、あなた:

私は、あなたはおそらく、すべてのurl要素の内容を出力し、次のスタイルシートを、したいと思いますXSLTプログラミングのスタイルも可能です改善する。不要なxsl:for-eachの代わりにxsl:apply-templatesを使用し、url要素の別のテンプレートを作成します。

XSLTスタイルシート(改善された)

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:stmp="http://www.sitemaps.org/schemas/sitemap/0.9"> 

<xsl:output method="xml" indent="yes"/> 

<xsl:template match="/"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Test</title> 
</head> 
<body> 
    <xsl:apply-templates/> 
</body> 
</html> 
</xsl:template> 

<xsl:template match="stmp:url"> 
    <div xmlns="http://www.w3.org/1999/xhtml"> 
     <xsl:value-of select="."/> 
    </div> 
</xsl:template> 

</xsl:stylesheet> 

出力が同じになります。オンラインで試してみてくださいhere

+0

、うまくいった! – Angel

-1

これはあなたが達成しようとしているかの簡単な方法です:

あなたXMLコード:

<?xml version="1.0" encoding="UTF-8"?> 
    <urlset> 
    <url>http://www.url.com/1/</url> 
    </urlset> 

あなたXSLTコード:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <html> 
    <body> 
     <xsl:value-of select="urlset/url"/> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 
+2

あなたはちょうどゴールポストを移動しました。実際の入力ドキュメントには_namespace_があり、これはかなりの違いがあります。 –

関連する問題