2011-07-06 42 views
5

我有一個搜索出版物引用的小應用程序。引文使用XML,我通過PHP將參數傳遞給XSLT,以便按照樂器或作者等字段進行搜索。該結構是這樣的:XPath:匹配多個子項中的一個

<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