2013-06-23 2 views
3

에 중간 XML에 대한 기본 XML에서 내 이전의 질문에 후속 나는 그것이 나에게 더 나은 이해를 위해 수 있습니다 생각하기 때문에 나는 일반적인 용어로 표현 그것을 시도 할 것이다 xslt split mp3 tag into artist and titleXLST는 : 이것은 최종 출력

XSLT : 적절한 XSLT idoms를 사용하여 무엇을 어떻게 사용하는지. > 중간 XML - -> ... -

입력 XML을> 최종 변환

또는 다른 말로 :

내가 원하는 무엇을 어떻게 할 수 있습니까 파이프 라인의 다양한 XML 변환 하나의 XSLT 문서에?

내 명령 줄 비유는 솔루션의 일부를 수행 한 다음 파이프를 사용하여 성공한 순서로 실행되도록하는 여러 명령 줄 도구를 사용하는 것과 유사합니다. (별도의 요소)> 중간체 XML - - (요소)

입력 XML>으로 분류 최종 XML,

I는 하나로 제한있어이 특정 경우

XSLT 문서를 웹 도구로 사용하면 xsl:include 또는 xsl:import도 성공하지 못합니다. 마음에 쉽게 올

+0

아마도 내가 질문을 오해하고 있습니다. 그러나 xslt 명령 줄 도구를 원하는대로 호출하여 한 단계에서 다음 단계로 출력을 파이프 할 수 있습니다. 예 : 'xsltproc 1.xlt 1.xml | xsltproc 2.xsl-'.하지만 tmp 파일을 선호합니다. –

+0

나는 그것을 여기서 할 수 있었으면 좋겠다. 내가 사용하는 도구는 다른 xsl 파일을 포함하는 것을 허용하지 않습니다. –

답변

3

세 가지 방법은 다음과 같습니다

  • 를 사용하여 운영 체제 파이프 라인 :

    xsltproc ss1.xsl input.xml \\ 
        | xsltproc ss2.xsl - \\ 
        | xsltproc ss3.xsl - \\ 
        > output.xml 
    

    내가 여기 알고 있어요 주요 단점은 모든 프로세서 - 명령해야한다는 것입니다 stdin에서 주 입력 트리를 쉽게 읽을 수 있도록하는 라인 인터페이스. 그래서 이렇게하면 임시 파일을 작성하는 경우가 있습니다. 다행히도 디스크 공간이 저렴합니다. 위로 : 당신은 아마 이미 이것을하는 방법을 알고있다.

  • XProc 파이프 라인을 사용하십시오.

    주요 단점 : 새로운 기술을 배워야합니다. 주요 장점 : 새로운 기술을 습득하게되는데, 이는 실제로 매우 차갑습니다.

  • 가 다른 작업을 위해 서로 다른 모드를 정의하고, 데이터를 처리하는 XSLT 2.0 (또는 노드 집합 연장 어떤 형태와 XSLT 1.0 프로세서)를 사용 거꾸로

    <xsl:template match="/"> 
        <xsl:variable name="tree1"> 
        <xsl:apply-templates mode="mode1"/> 
        </xsl:variable> 
        <xsl:variable name="tree2"> 
        <xsl:apply-templates mode="mode2" select="$tree1"/> 
        </xsl:variable> 
        <xsl:apply-templates mode="mode3" select="$tree2"/> 
    </xsl:template> 
    

    을 : 그것은 모든 야 단일 스타일 시트이므로 6 개월 후에 프로세스를 실행하는 방법을 모를 필요가 없습니다. 단점 : 모든 것이 하나의 스타일 시트에 있으므로 모듈성과 관심사를 분리하기 위해 더 열심히 노력해야합니다.

의심 할 여지없이 다른 접근법이 있습니다.

+0

모든 것이 단일 스타일 시트에 있어야하므로이 XSLT 엔진은 libxslt "node-set() 확장"을 허용합니까? 공급 업체 : libxslt, 버전 : 1.0 –

+0

xsltproc --dumpextensions | grep node-set'을 참조하십시오. 물론 스타일 시트 내에서 function-available()을 사용할 수도 있습니다. –

+0

그게 문제입니다 : xsltproc은 명령 행에 없습니다. 그것은 icecast 서버에 통합되어 있으며 어떤 버전으로 만들 었는지 모르겠습니다. 그것에 대해 새로운 질문을하겠습니다. –