2011-07-06 2 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

관련 문제