2012-06-19 3 views
1

디지털 비디오 카메라에서 생성 된 XML 파일로 작업하고 있습니다. 카메라는 사용자가 모든 카메라 설정을 SD 카드에 저장하여 설정을 호출하거나 다른 카메라에로드 할 수 있도록합니다. 필자가 쓰고있는 XSL 스타일 시트를 통해 사용자는 웹 브라우저에서 SD 카드에 저장 한대로 카메라의 설정을 볼 수 있습니다.XSL의 텍스트를 조건문으로 바꿉니다.

내 스타일 시트로 포맷 된 XML 파일의 값은 대부분 사람에게 적합하지만 일부 사람들은 그렇지 않습니다. 내가하고 싶은 것은 스타일 시트가 XML 파일의 값을 기반으로하지만 사람이 더 쉽게 이해할 수있는 텍스트를 표시하는 것입니다.

내 샘플 XML 파일은 여기에서 볼 수 있습니다 : 페이지 아래로 http://josephthomas.info/Alexa/Setup_120511_140322.xml

몇 줄이 표시됩니다

Color GAMMA-SxS Rec_Log 

"Rec_Log는"카메라가 이해하는 값이지만, 그것은되지 않습니다 카메라 사용자가 이해할 수있는 가치. 스타일 시트에서해야 할 일은 대신 "LogC"를 표시하는 것입니다. XML 파일에서

이 값이 thusly 히 정의 :이 값에 대한 샘플 페이지를 포매팅 XSL은
<DteLut lowerLimit="0" upperLimit="2">Rec_Log</DteLut> 

입니다

:

<tr> 
    <td class="title_column">Color GAMMA-SxS</td><td><xsl:value-of select="Settings/Groups/Recording/DteLut"/> 
    </td> 
</tr> 

그래서 내가 무엇을 할 수 있도록 노력하겠습니다 것은이있다 "LogC" Rec_Log보다는 페이지에 표시됩니다.

"when"조건문이 올바른 접근법이지만 나에게 이런 일이 발생하도록 구문에 익숙하지 않은 것 같습니다. XML 파일에는 바꿔야 할 다른 값들이 있지만 위의 것은 내 임무의 좋은 예입니다.

답변

0

당신이 할 수있는 일은 템플릿 매칭을 사용하여 예외를 변경하고자하는 것과 일치시키는 것입니다. 첫째,

<xsl:value-of select="Settings/Groups/Recording/DteLut"/> 

다음 줄

<xsl:apply-templates select="Settings/Groups/Recording/DteLut"/> 

를 수행하는 대신 다음 줄의,

<xsl:template match="DteLut[. = 'Rec_Log']"> 
    <xsl:text>LogC</xsl:text> 
</xsl:template> 

그런 다음 XSL에 다음 템플릿을 추가 할 때 * DteLut의 가치 * "Rec_Log"이면 사용자 정의 템플리트는 "LogC"출력 대신 일치됩니다. 일치하는 항목이 없으면 기본값으로있는 텍스트 값을 그대로 출력하는 기본 동작이 시작됩니다.

+0

완벽하게 작동합니다! 고맙습니다! 이제 대체하려는 텍스트에 대해 동일한 작업을 수행한다고 가정합니다. – JosephThomas

0

데이터 기반 접근 방식을 사용합니다.

<xsl:key name="trans" match="translate" use="@from"/> 

및 XSLT를 사용하는 경우 다음

<xsl:value-of select="Settings/Groups/Recording/DteLut"/> 

<xsl:value-of select="key('trans', Settings/Groups/Recording/DteLut, 
          doc('translations.xml'))/@to"/> 

을 변경

<translations> 
    <translate from="Rec_log" to="LogC"/> 
    <translate .../> 
</translations> 

는 다음 키를 정의 : 모든 번역을 제공하는 매핑 파일이 2.0 또는

<xsl:variable name="val" select="Settings/Groups/Recording/DteLut"/> 
<xsl:for-each select="document('translations.xml')"> 
    <xsl:value-of select="key('trans', $val)/@to"/> 
</xsl:for-each> 

1.0이 붙어 있다면.

+0

고마워요! 당신의 솔루션을 읽기 전에 내가 얻은 첫 번째 대답을 시도해 보았습니다. 이걸 뒷 버너에 보관할거야. – JosephThomas

관련 문제