2014-11-24 3 views
-1

XSLT 템플릿이 있습니다. 호출되고 매개 변수가 Java 프로그램에서 전송됩니다.XSLT : 입력 문자열에 앰퍼샌드가있는 경우이를 이스케이프 처리하는 방법

변수 중 하나에 '&'이 포함되어 있습니다.

<xsl:value-of select="customerName" /> 

고객 이름은 '&' 일 수 있습니다. 내가하는 일과 상관없이 나는 렌더링 할 수 없습니다. 나는 시도했다

replace(customerName, '&', '&amp;') 

나는 이것을 렌더링 할 수있는 방법이 있습니까?

+2

'customerName'이 매개 변수 인 경우에는 ' ='$ customerName "/>'이어야합니다. '$'를 주목하라. 자바에서는 아무 것도 대체 할 필요가 없습니다. – Tomalak

+1

무엇을 렌더링할까요? –

+0

귀하의 질문에 혼란이 있습니다. "입력 문자열", "매개 변수"및 "변수 중 하나"를 언급하지만 스타일 시트는 소스 문서의 노드를 가리 킵니다. 그것이 (이스케이프 처리되지 않은) 앰퍼샌드가있는 경우 소스 문서는 XML이 아니며 XSLT에서 처리 할 수 ​​없습니다. 매개 변수에 있다면 문제가 없어야합니다. –

답변

-1

이 밖으로 시도,

<xsl:if test="contains($customerName,'&amp;')"> 
    <xsl:value-of select="concat(substring-before($customerName,'&amp;'),substring-after($customerName,'&amp;'))"/> 
    </xsl:if> 
+0

그는 그것을 제거하고 싶지 않다, 그는 그것을 렌더링하고 싶어. – EJP

+0

그는 XSLT-2의 대체 기능을 사용하여 기본적으로 문자를 제거하고 대신 문자를 제거합니다.그게 내가 다른 방식으로 한 것. Xml은 기본적으로 데이터를 전달하는 데 사용되며 &는 예약 된 문자이므로 이스케이프 또는 제거해야합니다. – Saurav

0

는 XSLT 환경에서 XML을 실행하려면, XML 즉, ISO 엔티티, 유니 코드 개체 등의 표준 기관 만 허용이 있어야합니다.

'&'이 발견되면 해당 문자열은 ';'로 끝나야합니다. (엔티티 표현 인 & ...], 즉, 엔티티해야뿐만 세미콜론 단부 그 정의되어야 엔터티) 여기서 '&'

엔티티, 아니다 '& A;' 또는 '& # x0026;'은 엔티티입니다.

1

그래서 입력 자바 매개 변수 집합에는 &이 포함되어 있으며 출력에는 &amp;이 XML이되어야 할 수도 있습니다.

그런 다음 상단에 output 요소를 사용하십시오.

<xsl:output method="xml"/> 

대안

당신은 너무 자바 측에이를 정정을 시도 할 수 있습니다. &에서 작업하지 않을 경우 대체품 &amp;을 사용해야합니다.

customerName = customerName.replace(, "&", "&amp;"); 

XSLT에서 다음과 같이하면됩니다.

replace($customerName, '&amp;', '&amp;amp;') 
0

이 문제를 해결할 수있었습니다. 기본적으로 입력 매개 변수가 '&'이므로 잘못된 xml입니다. XML 인코딩해야했다.

+0

답변은 귀하의 질문만큼이나 명확합니다. 입력 ** 매개 변수 **는 유효한 XML 일 필요는 없습니다. 이는 기술적 인 문제이므로 정확한 용어를 사용하는 것이 중요합니다. –

관련 문제