5

これがxmlファイルです。「CategoryName」要素のスペースとキャリッジ リターンは意図的なものです。

<?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」のみが「空」テストに合格します。

なにが問題ですか?

4

2 に答える 2

2

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

DOMを提示しない場合ではなく、解析されていない入力(字句XML)を提示する場合にのみ、xsl:strip-spaceを適用するXSLTプロセッサーがいくつかあると思います。そのような振る舞いを正当化する仕様には何もありませんが、それは実装者の生活をはるかに楽にします。

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

于 2012-12-27T09:07:02.830 に答える
1

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

必要な結果を得る別の方法を次に示します。

置換:

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

:

   <xsl:if test="not(normalize-space(CategoryName))">
于 2012-12-27T17:06:15.657 に答える