2011-07-06 16 views
5

私は出版物の引用を検索する小さなアプリケーションを持っています。引用はXML形式であり、PHPを介してXSLTにパラメータを渡し、楽器や著者な​​どのフィールドで検索します。構造は次のようになります。XPath:複数の子供の1つに一致する

<publications> 
    <paper> 
     <authors> 
      <author>James Smith</author> 
      <author>Jane Doe</author> 
     </authors> 
     <year>2010</year> 
     <title>Paper 1</title> 
     (more children) 
    </paper> 
    (more papers) 
</publications> 

私はXSLTでの私のテンプレートを呼び出し、私は論文を検索基準に基づいて示されているダウン削り取っする述語を使用しています。パラメータ$作者が設定されているのであれば、例えば、私は:

<xsl:apply-templates select="paper[contains(authors/author, $author)]" /> 

問題:これは、「著者」で最初著者のために動作しますが、それ以降のものを無視します。したがって、上記の例では、 "Smith"を検索するとこのペーパーが返されますが、 "Doe"は何も返しません。

すべて「著者」要素を考慮に入れて式をフォーマットするにはどうすればよいですか?

答えて

5

関数containsは、ノードの集合ではなく、最初の引数として文字列を要求します。あなたの式では、authors/authorという最初の結果が文字列に変換され、関数に渡されます。代わりに

、独立author各ノードをテストする述語を使用します。

<xsl:apply-templates select="paper[authors/author[contains(., $author)]]" /> 
参照は、例えば、サクソンの行動のこの説明を

+0

ありがとうございました!夢のように働いた。 – tkm256

関連する問題