이 포스트는 XML 문서와 XSLT 1.0 stylesheets에 있는 namespaces를 토론한다. 특히, 그것은 다수 outputted 문서에 있는 namespace 접두어 그리고 선언을 통제하기 위하여 기술을 설명한다.
|
|
||
|
이 포스트는 XML 문서와 XSLT 1.0 stylesheets에 있는 namespaces를 토론한다. 특히, 그것은 다수 outputted 문서에 있는 namespace 접두어 그리고 선언을 통제하기 위하여 기술을 설명한다. 나는 최근에 저장하고 사용자 정의 가변의 배열을 stylesheet에 있는 접근하고 그 후에 그 가변을 그러나 고리를 이루는 방법에 관하여 대중적인 프로그래머 공개토론에 질문에 응답했다. 나는 많은 개발자가 이것을 하기를 위한 유효한 기술에와 이 화제에 관하여 나의 블로그에 있는 입장을 추가하는 것을 결정해 익숙하지 않는다는 것을 깨달았다. stylesheets 내의 사용자 정의 가변 배열은 XSLT 명세의 일부분. XSLT 1.0 stylesheets에 있는 이 문제를 처리하는 보통 방법은 XSLT namspace와 다른 비공백 namespace에 속하는 사용자 정의 최고 성분을 정의하기 위한 것이다. 이 사용자 정의 최고 성분은 전형적으로 착오 알림말, 검사 자료, 등등을 저장하기 위하여 이용된다. 당신은 추가 원시 문서로 stylesheet를 대우하고 문서 () 기능을 사용하여 첫번째 논쟁으로 빈 문자열로 적재해서 그 때 당신의 stylesheet 내의에서 이 사용자 정의 성분에 접근할 수 있다. 빈 문자열은 현재 stylesheet를 의미하기 위하여 해석된다. 뒤에 오는 stylesheet는 이 방법을 설명한다. <xsl: stylesheet xmlns: xsl= " http://www.w3.org/1999/XSL/Transform " version= " 1.0 " xmlns: foo= " http://foo.com " exclude-result-prefixes= " foo " > <xsl: 산출 method= " 원본 " encoding= " utf-8 "/> <foo: vars> <foo: var name= " z1 " >A</foo: var> <foo: var name= " z2 " >B</foo: var> <foo: var name= " z3 " >C</foo: var> <foo: var name= " z4 " >D</foo: var> </foo: vars> <xsl: 템플렛 match= "/"> <xsl: 를 위해 각 select= " 문서 (")/xsl: stylesheet/foo: vars/foo: var " > <xsl: value-of select= ". "/> <xsl: 만약에 test=인 경우에 " 위치 ()! = 마지막 () "> <xsl: text>, </xsl: text> </xsl: if> </xsl: for-each> <xsl: text> </xsl: text> </xsl: template> </xsl: stylesheet> 당신이 XSLT 2.0를 사용하는 경우에, 이 방법은 더 이상 더 간단하고 더 우아한 방법이 저희에게 유효하기 때문에 필요로 하지 않는다. 예를 들면, 당신은 <xsl를 사용하여 가변을 저장하고 직접 접근할 수 있다: 뒤에 오는 stylesheet에서 보이는 것처럼 variable> 성분. <xsl: stylesheet xmlns: xsl= " http://www.w3.org/1999/XSL/Transform " version= " 2.0 " > <xsl: 산출 method= " 원본 " encoding= " utf-8 "/> <xsl: 변하기 쉬운 name= " z1 " select= " "A""/> <xsl: 변하기 쉬운 name= " z2 " select= " "B""/> <xsl: 변하기 쉬운 name= " z3 " select= " "C""/> <xsl: 변하기 쉬운 name= " z4 " select= " "D""/> <xsl: 변하기 쉬운 name= " vars " select= " $z1, $z2, $z3, $z4 "/> <xsl: 템플렛 match= "/"> <xsl: 를 위해 각 select= " $vars" > <xsl: value-of select="." /> <xsl: 만약에 test=인 경우에 " 위치 ()! = 마지막 () "> <xsl: text>, </xsl: text> </xsl: if> </xsl: for-each> <xsl: text> </xsl: text> </xsl: template> </xsl: stylesheet> XSLT 2.0 stylesheet에 있는 이 자료를 저장하고 접근하는 또 다른 방법은 아래에 보이는 바와 같이 전역 변수 정의를 사용하기 위한 것이다. <xsl: stylesheet xmlns: xsl= " http://www.w3.org/1999/XSL/Transform " version= " 2.0 " > <xsl: 산출 method= " 원본 " encoding= " utf-8 "/> <xsl: 변하기 쉬운 name= " vars " > <var name= " z1 " >A</var> <var name= " z2 " >B</var> <var name= " z3 " >C</var> <var name= " z4 " >D</var> </xsl: variable> <xsl: 템플렛 match= "/"> <xsl: 를 위해 각 select= " $vars/var" > <xsl: value-of select="." /> <xsl: 만약에 test=인 경우에 " 위치 ()! = 마지막 () "> <xsl: text>, </xsl: text> </xsl: if> </xsl: for-each> <xsl: text> </xsl: text> </xsl: template> </xsl: stylesheet> 모든 3개의 stylesheets는 동일한 자료를 출력했다. 당신은 이 심상에 관하여 생각해 볼지도 모른다. 그것은 나의 휴대용 퍼스널 컴퓨터의 스크린에서 이다. 나는 XSLT 1.0 전이를 위해 마이크로소프트 비스타 SUA 및 마이크로소프트 Powershell v2.0 CTP2에서 2개의 XSLT 2.0 전이를 위해 Saxon 9에 xsltproc를 이용했다. 그것을 주의하십시오 특정 예외 하고는 XML 문서의 전체 내용을 베끼는 관지한 저에게 방법 제기된 최근 문제. XSLT1.0에 있는 이 필요조건을 취급하는 간단한 방법이 표준 XSL 신원 템플렛을 나의 stylesheet에 있는 포함하고 다른 템플렛을 예외를 취급하기 위하여 추가하기 위한 것이었다 끈다. 간단한 예는 것 개간자를 만들 것이다. 우리는 (나가 뻔뻔스럽게 W3Schools.com에서 그리고 간단하게 하기 위하여 변경해 베낀 뒤에 오는 XML 문서가 다는 것을 가정하십시오) 우리는 특정한 예술가 에의한 CD의 세부사항을 제외하면 이 문서를 완전히 베끼고 싶다. <? xml version= " 1.0 "? > <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Hide 당신의 <ARTIST>Dolly heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <YEAR>1988</YEAR> </CD> <CD> <TITLE>Greatest Hits</TITLE> Parton</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>RCA</COMPANY> <YEAR>1982</YEAR> </CD> <CD> <TITLE>One 밤 only</TITLE> <ARTIST>Bee Gees</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Polydor</COMPANY> <YEAR>1998</YEAR> </CD> <CD> <TITLE>Sylvias Mother</TITLE> <ARTIST>Dr.Hook</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS</COMPANY> <YEAR>1973</YEAR> </CD> <CD> <TITLE>Maggie May</TITLE> <ARTIST> Rod Stewart </ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Pickwick</COMPANY> <YEAR>1990</YEAR> </CD> </CATALOG> stylesheet는 아래에 있다. 그것은 예술가의 이름의 1개의 매개변수, i.e 이름, 또는 부분, 받아들인다. 그것은 그 마디를 제외하고 산출 문서에 그의 유명한 성냥 또는 is is 입력된 끈의 초집합 예술가와 관련있는 모든 마디 및 속성 및 속성을 베낀다. <? xml version= " 1.0 "? > <xsl: stylesheet xmlns: xsl= " http://www.w3.org/1999/XSL/Transform " version= " 1.0 " > <xsl: 매개변수 name= " 예술가 " ></xsl: param> <xsl: 산출 method= " xml "/> <xsl: 템플렛 match= " 마디 () | @* " > <xsl: copy> <xsl: 적용하 템플렛 select= " @* | 마디 () "/> </xsl: copy> </xsl: template> <xsl: 템플렛 match=" /CATALOG/CD " > <xsl: 만약에 test=인 경우에 " 아닙니다 (포함한다 (. /ARTIST, $artist))"> <xsl: select=사본 의"." /> </xsl: if> </xsl: template> </xsl: stylesheet> 첫번째 템플렛은 XSL 1.0 전이 권고에서 표준 신원 템플렛이다. 다른 마디의 아이들인 모든 속성 및 모든 마디가 그것에 의하여 일치하고, 산출 문서에 베낀다. 두번째 템플렛은 아무 성냥도 없는 경우에 <CD> 마디 및 아이들의 자동적인 베끼기 취소하고, 검색 문자열이 예술가의 이름의 이름에 의하여, 또는 부분이, 일치하지 않는다는 것을 보기 위하여 검사하고, 산출 문서에 단지 마디 및 속성의 깊은 사본만 한다. 당신을 추측해서 Linux 시스템, 당신에 "Stewart"가 stylesheet에 매개변수로 통과될 때 (뒤에 오는 산출 문서로 입력 문서를 변형시키기 위하여 이용할 수 있다 격언을 위한 XSLT C 내장 함수의 일부분인) 커맨드 라인 실용적인 xsltproc 있으십시오. BTW는, 매개변수 문자열을 위한 자바 작풍 끈 따옴표의 사용을 주의한다. xsltproc $ - 매개변수 예술가 "'Stewart'" file.xsl file.xml 산출 문서는 여기 있다. 입력 문서의 사본 를 제외하고를 위한 "기록"이다 이 포스트는 XSLT 1.0와 XSLT 2.0에 있는 동적인 XPath 표정 평가의 문제를 그리고 EXSLT 연장 기능을 사용하여 그것을 취급하는 방법 토론한다. XSLT 1.0 명세에서 formating 날짜와 시간 동안 지원은 존재하지 않는다. 이것은 사람이 XSLT 1.0를 사용하여 날짜와 시간 끈을 배열할 다는 것을 의미하지 않았다; 그것에 의하여 다만 이렇게 한 것을 매우 단단한 하고 stylesheets에 많은 여분 코드 행을 추가한다. 그러나 stylesheets를 개발하는 모두가 위로 하는 것을 하를 끝내는 것은 무언가이다. 이 포스트에서 나는 당신에게 XSLT 1.0에 있는 날짜를 배열하고 XSLT 2.0와 XPath 2.0에 있는 몇몇을의 새로운 날짜 시간 formating 그리고 조작 기능 토론하는 몇몇 방법을 보여준다. |
||
|
©를 2005-2011년 Finnbarr P. 머피 판권을 얻으십시오. 판권 소유. |
||