2013-03-19 2 views
1

앰퍼샌드 기호 (&)가 포함 된 특정 XML 태그를 출력하려고 할 때 현재 약간의 문제가 있습니다.앰퍼샌드 기호가 나타날 때 XSLT가 충돌합니다.

그래서 더 구체적으로 다음 태그를 출력하려고합니다. 나는 다음의 태그 그러나 나는 다음과 같은 코드

<xsl:template match="fullname"> 
    <xsl:apply-templates/> 
</xsl:template> 

그것을 시도했다 그리고 나는 또한

<xsl:template match="fullname"> 
    <xsl:value-of-select="." disable-output-escaping="Yes"/> 
</xsl:template> 
을 시도

<fullname>Ben and Jerry</fullname> 

잘 실행하여 오류

<fullname>Ben & Jerry</fullname> 

를 얻을 수

두 가지 모두 오류가 발생했습니다. 또는. 내가이 일을 얼마나 유일한 방법은이 실행 가능한 옵션이 아니다 그러나 내가받은 XML 파일을 통제 할 수 없으며,이

<fullname><![CDATA[Ben & Jerry]]></fullname> 

같이 CDATA를 사용하는 것입니다. 이 문제를 우회/해결하기 위해 XSLT에서 할 수있는 일이 있습니까?

감사합니다.

+5

이스케이프 처리되지 않은 &가 포함 된 경우, ** ** ** XML이 아닙니다. 그들이 실패한 XML을 당신에게 공급하고있는 사람에게 말하십시오. –

+0

감사합니다 돈 Roby. 그러나 출력 된 XML 파일을 제어 할 수는 없습니다. 따라서 해결 방법을 찾으려고합니다. 이상적으로 Ampersand가 데이터에 포함되어있는 동안 이상적이지만 XSLT가 서명을 모두 무시하는 경우에도 만족할 것입니다. –

+1

@Jaco : "통제 없음"은 상대적인 용어입니다. 두 개의 짝수가 홀수로 합쳐지는 100 개의 방정식을 생성하라는 요청을 받았다면 그럴 수 없다고 말할 수 있습니다. 요구 사항에 오류가 있습니다. XML이 아닌 XML을 생성하라는 요청을 받았을 때도 마찬가지입니다. 유사한 고려 사항이 입력 XML에도 적용됩니다. 나는 잘못된 입력이나 잘못된 요구 사항에 대한 해결 방법을 고려할 수 없다고 말하려는 것이 아니지만 "나는 통제 할 수 없다"라는 말을 듣고 항상 "사실은 그렇지 않습니다."라고 생각합니다. – LarsH

답변

5

앰퍼샌드는 올바른 형식의 XML에서는 나타나지 않습니다. 귀하의 예는이어야합니다

<fullname>Ben &amp; Jerry</fullname> 

나는 어떤 XSLT 프로세서로도이 문제를 해결할 수 없을 것이라고 생각합니다. XML을 생성하는 모든 것을 고쳐서 정형화해야합니다.

+0

나는이 예제가 입력 XML을 나타 내기위한 것인지 궁금해하고있다. OP는 "다음 태그를 출력하려고 할 때"라고 말합니다. 하지만 입력 된 유사 XML 문서에서 복사하려고한다고 가정하고 있다고 생각합니다. 귀하가 옳다고 생각합니다. – LarsH

1

그래서 더 구체적으로 다음 태그를 출력하려고합니다. 내가 실제로 오류를

<fullname>Ben & Jerry</fullname>

를 얻을,이 태그가 아닙니다. 시작 태그이고 그 뒤에 유효하지 않은 컨텐트와 그 뒤에 끝 태그가옵니다.

XSLT를 사용하여 잘못된 콘텐츠를 출력 할 수 없습니다. XML이 아닌 것을 출력해야한다면, 비 XML 도구를 사용해야합니다. 그리고 비 XML 포럼에 대한 조언을 얻을 가능성이 더 큽니다.

명확하지 않은 것은 입력과 출력이 정확히 무엇입니까. 잘못된 XML을 출력하려고하지만 입력 내용을 밝히지 않는다고 가정합니다.

관련 문제