developer tip

XSLT에서 HTML 엔티티 사용 (예 :)

copycodes 2020. 11. 26. 18:46
반응형

XSLT에서 HTML 엔티티 사용 (예 :)


XSLT에 html 엔티티를 포함하는 가장 좋은 방법은 무엇입니까?

<xsl:template match="/a/node">
    <xsl:value-of select="."/>
    <xsl:text>&nbsp;</xsl:text>
</xsl:template>

이것은 XsltParseError를 반환합니다 .


CDATA 섹션을 사용할 수 있습니다.

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>

또는 로컬 DTD에서 & nbsp를 설명 할 수 있습니다.

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>

또는 &#160;대신 사용&nbsp;


aku의 대답의 두 번째 부분에서 접근 방식을 확장하고 다음 과 같이 알려진 모든 문자 참조를 사용할 수도 있습니다.

<!DOCTYPE stylesheet [
  <!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
      "http://www.w3.org/2003/entities/2007/w3centities-f.ent">
  %w3centities-f;
]>
...
<xsl:text>&nbsp;&minus;30&deg;</xsl:text>

<xsl:text disable-output-escaping="yes">접근 방식 과 비교하여 결과에 특정 차이가 있습니다 . 후자는 &nbsp;모든 종류의 출력 과 같은 문자열 리터럴을 생성 <xsl:output method="text">할 것 입니다 . 그리고 이것은 당신이 원하는 것과 다를 수 있습니다 ... 반대로, XSLT 템플릿에 대해 정의 된 엔티티를 얻는 <!DOCTYPE ... <!ENTITY ...것은 항상 일관된 출력을 생성합니다 당신과 함께 xsl:output설정.

그러면 로컬 엔티티 리졸버를 사용하여 XSLT 엔진이 인터넷에서 문자 엔티티 정의를 가져 오지 못하도록하는 것이 현명 할 수 있습니다. JAXP 또는 명시 적 Xalan-J 사용자는 리졸버를 올바르게 사용하기 위해 Xalan-J 용 패치가 필요할 수 있습니다. 패치 다운로드 및 의견 은 내 블로그 XSLT, 엔터티, Java, Xalan ...참조하십시오 .


xslt 내에서 html 엔티티를 사용할 수있는 또 다른 가능성은 다음과 같습니다.

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>

XSLT는 기본적으로 다섯 개 가지 기본 요소를 처리 : lt, gt, apos, quot,와 amp. 다른 모든 것은 @Aku 멘션 으로 정의 되어야 합니다.


이것은 XsltParseError를 반환합니다 .

예, 그 이유 &nbsp;는 HTML 에서처럼 XML 또는 XSLT에서 미리 정의 된 엔티티가 아니기 때문입니다.

다음을 나타내는 유니 코드 문자를 사용할 수 있습니다 &nbsp;.&#160;


이제 유니 코드가 있으므로 명명 된 문자 엔터티를 사용하는 것은 일반적으로 비생산적입니다. 그 이유 때문에 엔터티 대신 중단되지 않는 공백에 유니 코드 문자를 사용하는 것이 좋습니다. 또는 &#160명명 된 엔터티 대신 엔터티를 사용할 수 있습니다 . 명명 된 엔터티를 사용하면 XML이 인라인 또는 외부 DTD에 종속됩니다.


이 모든 솔루션이 공백에 Â 문자를 생성하는 것을 발견했습니다.

사용하면 <xsl:text> </xsl:text>문제가 해결되었습니다. 하지만 <xsl:text>#x20;</xsl:text>잘 작동 할 수 있습니다.


정보 감사합니다. Dynamicweb CMS 템플릿에서 XSLT 변환을 수행하면서 저에게 도움이 된 내용을 기반으로 짧은 블로그 게시물을 작성했습니다 .

블로그 게시물은 여기에 있습니다 : How to add entity to XSLT templates .

/ Sten Hougaard


엔티티 # x160 을 사용해야합니다 .


Aku의 DOCTYPE 접근 방식에는 운이 없었습니다.

Windows 2003 서버에서 MSXML 변환에서 저에게 효과가 있었던 것은

    <xsl:text disable-output-escaping="yes">&amp;#160;</xsl:text>

위의 일종의 하이브리드. Stackoverflow 기여자에게 감사드립니다!


텍스트 태그 사이에 하나의 공백 문자이면 충분합니다.

참고 URL : https://stackoverflow.com/questions/31870/using-an-html-entity-in-xslt-eg-nbsp

반응형