2008-09-19 4 views
6

XSLT 문서 내에서 현재 디렉토리의 파일 집합을 반복 할 수 있습니까?여러 파일 입력?

보고서를 생성하기 위해 몇 가지 분석이 필요한 xml 파일로 가득 찬 디렉토리가있는 상황이 있습니다. 내 스타일 시트를 하나의 문서에서 잘 작동하도록했지만 XML 문서를 병합하는 다른 도구를 사용하지 않고 확장하고 싶습니다.

나는이 라인을 따라 생각하고 있었다 :

<xsl:for-each select="{IO Selector Here}"> 
    <xsl:variable select="document(@url)" name="contents" /> 
    <!--More stuff here--> 
</xsl:for-each> 

답변

8
XSLT 2.0

, 색슨 족과 함께, 당신은 collection() 기능이 작업을 수행 할 수 있습니다

<xsl:for-each select="file:///path/to/directory"> 
    <!-- process the documents --> 
</xsl:for-each> 

은 자세한 내용은 http://www.saxonica.com/documentation/sourcedocs/collections.html를 참조하십시오 .

XSLT 1.0에서는 별도의 도구로 처리 할 문서를 나열하는 색인을 만들어야합니다. 귀하의 환경은 그러한 도구를 제공 할 수 있습니다. 예를 들어 Cocoon에는 이러한 색인을 만드는 Directory Generator이 있습니다. 그러나 당신의 환경이 무엇인지 알지 못하면 무엇을 추천해야하는지 알기가 어렵습니다.

0

내가 XSL은 그런 식으로 작동하도록 설정 생각하지 않습니다 : 하나 개 이상의 문서에 다른 것을 사용할 수 있도록 설계하고, 그렇지 않으면 뭔가 XSLT가 적용되어야하는 파일을 찾는 책임을집니다.

주 문서가 하나 있고 지원되는 문서가 고정되어있는 경우 document() function을 사용하여 특정 노드 및/또는 값을 반환 할 수 있지만 귀하의 경우가 다른 것으로 판단됩니다.

0

XSLT 내에서 이것이 가능하지 않을 것이라고 생각합니다.

모든 XML 파일 이름을 < xsl : param name = "files"/ >으로 쉼표로 구분 된 목록으로 전달하고 재귀 및 substring-before() 및 substring-after()를 사용하여 반복 할 수 있습니다.

0

저는 이것을 위해 사용할 수있는 명령 줄 도구가 있습니다.이 도구는 Ant (Java 빌드 도구)에 내장 된 XSLT 프로세서를 사용하여 input + transform을 출력으로 처리합니다. 루프를위한 배치 파일로 감싸기 쉬울 것입니다.

SVN : //donie.homeip.net/public/tools

2

다른 사람들이 말했듯이 플랫폼에 구애받지 않는 방식으로 할 수는 없습니다. .NET 환경에서는 document ('dir : // c :/foo /')가 원하는 형식으로 'c : \ foo'디렉토리에있는 파일 목록을 반환하도록 사용자 정의 XmlResolver를 만들 수 있습니다. 사용자 정의 XmlResolver에의에 대한 자세한 내용은 다음 링크를 참조하십시오 :

Customizing the XmlUrlResolver Class
The power of XmlResolver

은 또한 당신이 당신의 XSLT 스타일 시트 또는 확장합니다 ( msxsl:script 요소와 같은) 스크립트를 사용에 의존 할 수있다.

이러한 모든 방법을 사용하면 XSLT 코드를 다른 플랫폼으로 옮길 수 없게됩니다.

0

.Net을 사용하는 경우 XsltExtension을 사용하여 XSLT 문서에서 .net 클래스의 메서드로 호출 할 수 있습니다. 그런 다음 메서드는 노드 집합을 다시 XSLT로 반환 할 수 있습니다. 그래서 당신의 방법은 파일 입출력 부분을 처리 할 수 ​​있습니다.