2014-10-22 2 views
0

노드에 특정 문자열이 있으면 기존 테스트를 변경하려고합니다. 지금은 하나 개의 문자열에 대해 작동은 다음과 같습니다XSL에 여러 문자열이 포함되어 있습니다.

<xsl:key name="TEST" match="Parrent[contains(./Name,'Aurora') and contains(./Status,'Ongoing')]" use="Final"/> 

그리고 나중에 노드의 마지막 값을 변환하는 데 사용되는 경우 이름 = 오로라 및 상태 = 지속적인.

Status 
Ongoing 
Stoped 
Started 
Ready 
NotReady 
. 
. 
. 

그래서 기본적으로 난 단지 더 상태 유형에 대해 이전과 동일한 기능을 수행 할 싶습니다 지금 같은 일에하지만이처럼 보이는 15 행에 다른 xml 파일에서 얻을 여러 값에 대한 관심이 메신저 지속적인 것보다. 그러한 변환을 구현하는 가장 좋은 방법은 무엇입니까? 미리 감사드립니다.

+0

** 1. ** XSLT 1.0 또는 2.0을 표시하십시오. - ** 2 ** ** 다중 값 목록의 정확한 형식과 수신 방법이 명확하지 않습니다. –

+0

죄송합니다,이 xslT 1.0 – user2842773

+0

좋은 작동하도록되어 있어야합니다. 이제는 두 번째 질문에 대답 할 준비가되었을 때마다 ... –

답변

0

그럼 실제로 contains 수표가 필요합니까, 아니면 평등을 비교할 수 있습니까? 후자의 경우 노드 세트 또는 노드 또는 값의 시퀀스와 함께 = 연산자를 사용할 수 있습니다. XSLT 2.0의 경우

Status = ('Ongoing', 'Stopped', 'Started', 'Ready', 'NotReady') 

각각 다른 구조의 값이있는 문서는 예 :

<status-list> 
    <status>Ongoing</status> 
    <status>Stopped</status> 
    <status>Started</status> 
    ... 
</status-list> 

는 당신은

Status = document('status-list-data.xml')/status-list/status 
0

당신은 <key>의 경기 속성에 변수를 사용할 수 없습니다 비교할 수 있지만, 당신은 술어에 의해 필터는 키의 결과. 예를 들어, 다음 식 : 당신이 바인딩 네임 스페이스를 선언해야

<xsl:variable name="status-list"> 
    <status>Ongoing</status> 
    <status>Stopped</status> 
    <status>Started</status> 
    <status>Ready</status> 
    <status>NotReady</status> 
</xsl:variable> 

참고 :

key('keyname', something)[Status=exsl:node-set($status-list)/status] 

값 변수에 나열된 정의 된 하위 상태가있는 경우에만 노드를 선택합니다 exsl 접두사 - 참조 : http://www.exslt.org/exsl/index.html

관련 문제