2012-12-27 8 views
5

これはxmlファイルです。 "CategoryName"要素のスペースとキャリッジリターンが意図されています。xsl:strip-spaceはキャリッジリターンを削除していません

<?xml version="1.0" encoding="utf-8"?> 
<group> 
    <item> 
     <id>item 1</id> 
     <CategoryName> 


     </CategoryName> 
    </item> 
    <item> 
     <id>item 2</id> 
     <CategoryName></CategoryName> 
    </item> 
    <item> 
     <id>item 3</id> 
     <CategoryName>  </CategoryName> 
    </item> 

</group> 

以下は、上記のXMLファイルのXSLTファイルです。それは "CategoryName"要素のすべての空白をクリアすることです。次に、 "CategoryName"が空であるかどうかをテストします。

<?xml version="1.0" encoding="utf-8"?> 
<!-- DWXMLSource="testempty.xml" --> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> 

    <xsl:strip-space elements="*" /> <!--HERE IS STRIP SPACE--> 


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

    <body> 
    <xsl:for-each select="/group/item"> 
     <xsl:if test="CategoryName = ''"> <!--HERE IS THE TEST--> 
     <p>Empty</p>   <!--IT WILL OUTPUT 'EMPTY' IF THE ELEMENT IS EMPTY--> 
     </xsl:if> 
    </xsl:for-each> 
    </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

問題は、xsl:strip-spaceはその仕事をしていません。アイテム2の「CategoryName」だけが「空の」テストに合格します。

どうしたのですか?

+0

私は日食でこれをテストし、それが働きましたあなたが期待通りにそれを印刷しました。3 "空" – Weibo

+0

私は使用しました。 Adobe Dreamweaverを使用すると、1つの空だけが表示されます。 – user1535147

+0

可能な複製:http://stackoverflow.com/questions/1134318/xslt-xslstrip-space-does-not-work – K3N

答えて

1

明らかに、DeamWeaverのXSLTプロセッサにはバグがあります。で

<xsl:if test="CategoryName = ''"> 

を交換してください:ここで

が望む結果を得るための別の方法です

<xsl:if test="not(normalize-space(CategoryName))"> 
+0

2つの厄介な日の後にウェブを見つける....心から感謝します。 – user1535147

+0

@ user1535147、よろしくお願いいたします。私はXPathの良い本を読むことをお勧めします - このリソースを参考にしてください:http://stackoverflow.com/a/341589/36305 –

2

Dreamweaverが使用しているXSLTエンジンがわかりませんが、これは間違っています。

解析されていない入力(レキシカルXML)でそれらを表示すると、xsl:strip-spaceのみを適用するXSLTプロセッサが存在する可能性があります。このような振る舞いを正当化するための仕様には何もありませんが、実装者の生活を楽にします。

ただし、これはxsl:strip-spaceを使用する方法ではありません。これは、 "無視できる"空白、つまり要素のみのコンテンツのインデントに使用される空白を取り除くために使用することを意図しています。 XSLT 2.0スキーマ対応変換を使用している場合、これは原則として形式化されます。xsl:strip-spaceは、単純なコンテンツを持つ要素のコンテンツには影響しません。これは、そのような要素のスペースを取り除くと、その要素がスキーマに対して無効になる可能性があるからです。

+0

が合意しました!結局のところ、スペースやキャリッジリターンはnullではありません! –

+0

空の要素をテストするにはどうすればよいですか? – user1535147

+0

テストを使用する 'normalize-space(XX)!= ''' –

関連する問題