2011-02-03 3 views
1

for-eachに "Site"が "PB"のtop_coach_sales_vwを選択するのは簡単だと思ったが、 XML内のどのデータもループしません。XSLのfor-eachループに表示されているものをフィルタリングする方法

これはPHPエコーの一部であるため、一重引用符をエスケープしています。

<xsl:for-each select="NewDataSet/top_coach_sales_vw[Site==\'PB\']"> 
     <td><xsl:value-of select="name"/></td> 
     <td><xsl:value-of select="Site"/></td> 
     <td><xsl:value-of select="Status"/></td> 
</xsl:for-each> 

XML:

<NewDataSet> 
    <top_coach_sales_vw> 
     <name>Mike</name> 
     <Site>PB</Site> 
     <State>Ready</State> 
    </top_coach_sales_vw> 

    <top_coach_sales_vw> 
     <name>Bill</name> 
     <Site>EL</Site> 
     <State>Talking</State> 
    </top_coach_sales_vw> 

    <top_coach_sales_vw> 
     <name>Ted</name> 
     <Site>PB</Site> 
     <State>Ready</State> 
    </top_coach_sales_vw> 
</NewDataSet> 
+0

良い質問、1。提供されたコードのすべての問題の説明と、完全な解決方法については、私の答えを参照してください。 :) –

+0

マイナーポイントですが、同じ値を持つことが保証されているので、 ''を 'PB'だけで置き換えることができます。それはあなたのxsltを少し効率的にするでしょう。また、XML文書の場合、PHPの文字列リテラルにheredoc/nowdoc構文を使用することをお勧めします。エスケープすることについて心配することはありません:http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc – Flynn1179

答えて

3
<xsl:for-each select="NewDataSet/top_coach_sales_vw[Site==\'PB\']"> 

はこのといくつかの問題があります。

  1. は、XPathには==演算子がありません。おそらく=比較演算子が必要です。

  2. \'PB\'は文法的に間違っです - あなたはおそらく'PB'

  3. NewDataSetが提供されるXML文書の最上位要素である意味しました。上記の<xsl:for-each>命令がドキュメントのルート(/)と一致しないテンプレートにある場合、式NewDataSet/top_coach_sales_vw[Site='PB']は相対的な式であり、現在のノードから評価されるため、ノードを選択しません。テンプレートマッチ)。

ソリューション

用途:

<xsl:for-each select="/NewDataSet/top_coach_sales_vw[Site='PB']"> 
1

XSLTは、それの等価演算子として単一=を使用しています。

また、ループ本体でStatusを選択していますが、ここにリストされているxmlサンプルにはState要素が含まれていますが、これはおそらく監視です。

+0

私はそれが私がチェックした最初のものの一つだと思った私は私の問題を見てくれてありがとう。 – Denoteone

関連する問題