2017-05-03 3 views
0

XML 문서를 다른 XML로 변환하기 위해 libxslt (xsltproc 명령)를 사용하고 있습니다.XSLT 1.0 숫자 참조를 사용하여 XML 이스케이프 문자 출력

출력에서 ​​XML 이스케이프 된 문자에 숫자 참조를 사용하도록 libxslt에 요청하는 간단한 방법이 있는지 궁금합니다 (예 : &의 경우 &). 그 이유는 출력을 소비하는 응용 프로그램이 미리 정의 된 엔티티 (&)를 이해하지 못하지만 숫자 문자 참조를 이해하기 때문입니다.

이것을 달성하는 데 몇 가지 복잡한 방법이 있다는 것을 알고 있지만 간단한 스타일 시트 표시 또는 명령 줄 옵션이 누락 된 것 같습니다. 그렇지 않은 경우에는 소비 응용 프로그램을 수정하는 것이 더 적절할 것입니다.

는 예를 제공하기 위해, 입력 XML은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
<A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <B>&lt; &gt; &quot; &amp; &apos;</B> 
    <B>&#60; &#62; &#34; &#38; &#39;</B> 
</A> 

XSL은 다음과 같습니다

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" /> 
    <xsl:strip-space elements="*" /> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="/A/B" /> 
    </xsl:template> 

    <xsl:template match="B"> 
    <X><xsl:attribute name="ATTR"><xsl:value-of select="." /></xsl:attribute></X> 
    <xsl:text>&#x0A;</xsl:text> 
    </xsl:template> 

</xsl:stylesheet> 

결과는 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
<X ATTR="&lt; &gt; &quot; &amp; '"/> 
<X ATTR="&lt; &gt; &quot; &amp; '"/> 

나는 것 후있어 결과 be :

<?xml version="1.0" encoding="UTF-8"?> 
<X ATTR="&#60; &#62; &#34; &#38; '"/> 
<X ATTR="&#60; &#62; &#34; &#38; '"/> 

내가 스타일 시트 전에 다음을 추가하는 시도 :

<!DOCTYPE xsl:stylesheet [ 
    <!ENTITY amp "&#38;"> 
]> 

또는

<!ENTITY amp "&#38;#38;"> 

는하지만 그것은 작동하지 않았다 (즉, 결과는 엔티티 정의가 있든 없든 동일합니다).

character-map은 XSLT 1.0에서 사용할 수 없기 때문에 옵션이 아님을 알고 있습니다.

답변

0

XML과 같은 표준은 모든 사람이 준수 할 경우 엄청난 비용 절감 효과를 가져 오며 수정 된 버전이나 제한된 버전 또는 확장 된 버전의 표준을 사용하려고 시도하면 아무런 이점을 얻지 못합니다. 따라서 가능한 경우 제한된 하위 집합을 생성하도록 보내는 응용 프로그램을 변경하는 대신 법적 XML을 허용하도록받는 응용 프로그램을 변경해야합니다.

수신 응용 프로그램이 &amp;을 수락하지 않으면 아마도 표준 XML 파서가 아닌 일종의 가정용 파서를 사용하고 있다는 뜻이며, 아마도 다른 많은 불필요한 제한도 있다는 것을 의미합니다. 점차적으로 나타날 것입니다 응용 프로그램의 수명 동안.