2017-05-10 14 views
0

하나의 XSLT 스타일 시트에서 하나 이상의 EXSLT 확장을 선언하는 적절한 방법은 무엇입니까?XSLT 스타일 시트에서 하나 이상의 EXSLT 확장을 선언하는 적절한 방법

더 중요한 것은 xmlns:*="http://exslt.org/*"의 목적은 무엇입니까?

documentation는 말한다 : xmlns:date="http://exslt.org/dates-and-times는 출력 문서의 루트 노드에 표시하지 그냥 않도록

You can use the extension-element-prefixes attribute to prevent the extension namespaces from being output in the result tree.

가 있습니까? 그렇다면 왜 그렇게 중요합니까? 나는 lxml 프로세서와 XSLT 1.0을 사용하고

lxml.etree.XMLSyntaxError: Attribute extension-element-prefixes redefined, line 7, column 40

: 다음 스타일 시트와

가 나는 오류가 발생합니다.

XML 입력

<?xml version='1.0'?> 
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl" version="1.0"?> 
<item>test</item> 

XSLT 1.0 스타일 시트

<xsl:stylesheet 
     version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:str="http://exslt.org/strings" 
     xmlns:date="http://exslt.org/dates-and-times" 
     extension-element-prefixes="str" 
     extension-element-prefixes="date"> 

<xsl:template match="/"> 
    <html> 
    <body> 
     <xsl:value-of 
     select="str:padding(2 - string-length(date:month-in-year()), 0)"/> 
     <xsl:value-of select="date:month-in-year()"/> 
    </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

HTML 출력

<html xmlns:str="http://exslt.org/strings" xmlns:date="http://exslt.org/dates-and-times"> 
    <body>05</body> 
</html> 

답변

1

당신 xsl:extension-element-prefixes 속성에 공백으로 구분 된 선언 된 네임 스페이스 접두어 목록을 채워야합니다. 당신의 예에서, 그것은 다음과 같습니다

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:str="http://exslt.org/strings" 
xmlns:date="http://exslt.org/dates-and-times" 
extension-element-prefixes="str date"> 

And more importantly what is the purpose of xmlns:*="http://exslt.org/*" ?

그것은 네임 스페이스 URI에 접두사를 결합하는 네임 스페이스 선언입니다. 접두어는 원하는대로 지정할 수 있습니다. 즉, 요소가 지원되는 확장에 속하는 네임 스페이스에 있음을 프로세서에 알리는 네임 스페이스 URI입니다.

이것은 출력에 선언이 나타나지 않도록하는 것과 아무런 관련이 없습니다. 이는 extension-element-prefixes 또는 exclude-result-prefixes 속성을 사용하여 수행됩니다. 왜 이것이 중요한가? 네임 스페이스 선언이 대상 스키마의 일부가 아닌 경우 중요 할 수 있습니다.