문제

역사적인 이유로 우리는 혼합이 있습니다

<xsl:output method="xml">

그리고

<xsl:output method="html">

그리고

<xsl:output method="xhtml">

XSL 파일의 포함 계정 내부. 이제 모든 XSL 파일이 동일한 출력 메소드를 사용하도록 리팩터를 리팩터링하려고합니다.

결국 우리는 XHTML 출력을 생산하려고합니다. 그래서 후자가 최선의 선택이라고 생각합니다.

그러나이 세 가지 출력 방법의 차이점은 무엇이며 어떤 솔루션에 어떤 종류의 솔루션에 사용 하시겠습니까?

편집하다: XSLT 2.0을 사용하고 있습니다

도움이 되었습니까?

해결책 2

XSLT 2.0 사양을 읽음으로써 답을 찾았습니다.XSLT 2.0 및 XQuery 1.0 직렬화).

컨텐츠 모델이 비어 있지 않은 XHTML 요소의 빈 인스턴스가 주어지면 (예 : 빈 제목 또는 단락) 시리얼 라이저는 최소화 된 양식을 사용해서는 안됩니다. 즉, 출력해야합니다 <p></p> 그리고 아닙니다 <p />.

컨텐츠 모델이 비어있는 XHTML 요소가 주어지면 Serializer는 예를 들어 최소화 된 태그 구문을 사용해야합니다. <br />, 대안 구문으로 <br></br> XML에 의해 허용되면 많은 기존 사용자 에이전트에서 불확실한 결과가 제공됩니다. 시리얼 라이저에는 후행 /> 이전 공간이 포함되어야합니다. <br />, <hr />그리고 <img src="karen.jpg" alt="Karen" />.

세리어 라이저는 엔티티 참조를 사용해서는 안됩니다 &apos; XML 및 XHTML에서 합법적이지만 HTML에서 정의되지 않으며 모든 HTML 사용자 에이전트에 의해 인식되지는 않습니다.

시리얼 라이저는 가능하면 XHTML DTD의 요구 사항과 일치하는 방식으로 네임 스페이스 선언을 출력해야합니다. xhtml 1.0 dtds는 html 요소에만 나타나려면 선언 xmlns = "http://www.w3.org/1999/xhtml"이 필요하며 HTML 요소에만 나타납니다. Serializer는 결과 트리에있는 네임 스페이스 노드와 일치하는 네임 스페이스 선언을 출력해야하지만 DTD가 유효하지 않은 요소에 중복 네임 스페이스 선언을 출력하지 않아야합니다.

그것은 대답이 사용되고 있음을 의미합니다 <xsl:output method="xhtml">.

다른 팁

HTML은 HTML로 직렬화되므로 출력은 잘 구성된 XML이 아닐 수 있습니다. 브라우저로만 보내고 XML로 구문 분석 할 수없는 경우에도 효과가있을 수 있습니다.

XML은 XML로 직렬화되므로 출력은 잘 구성되지만 출력을 사용하여 브라우저에서 일부 문제가 발생할 수 있습니다. 자기 폐쇄와 같은 작은 것들 <script /> 그리고 <div /> 집단. 그 문제를 피하려면 요소 내부에 댓글을 추가하는 것과 같은 게임을해야합니다 (예 : <script src="someJSFile.js"><!--don't close my script tag --></script>)

XSLT 2.0 엔진이 있고 일부 요소가 직렬화되는 방법에 대해 걱정하지 않고 잘 형성된 HTML 출력을 원한다면 XHTML을 사용하십시오.

내가 아는 한, 아니요 method:xhtml ~로 xsl:output XSLT 1.0의 지침.

WC3Schools 이것에 동의합니다.

XHTML은 XML 방언이므로 이것이 제가 사용할 것입니다.

그러나 당신이 사용중인 경우 XSLT 2.0, 또한 사용할 수도 있습니다 xhtml, 그것이 당신이 출력하는 것이기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top