2016-08-09 2 views
0

나는 그 같은 많은 XML 파일이 있습니다XSLT의 CONCAT 많은 파일

File1.xml :

<Document xmlns="Forward"> 
    <Id>123456789</Id> 
</Document> 

File2.xml을 :

<Document xmlns="Forward"> 
    <Id>4568844</Id> 
</Document> 

나는이 파일을 CONCAT 및 추가하고 싶습니다 다음과 같은 네임 스페이스 접두사 :

출력 :

012 3,516,
<?xml version="1.0" encoding="UTF-8"?> 
<mes:Fichier xmlns:mes="message"> 
    <mes:Rcvr>RECEIVE</mes:Rcvr> 
    <doc:Document xmlns:doc="Forward"> 
    <doc:Id>123456789</doc:Id> 
    </doc:Document> 
    <doc:Document xmlns:doc="Forward"> 
    <doc:Id>4568844</doc:Id> 
    </doc:Document> 
</mes:Fichier> 

내 XLS :

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

    <xsl:param name="Rcvr"/> 
    <xsl:param name="fileList"/> 

    <xsl:template match="/"> 
     <xsl:copy> 
      <mes:Fichier xmlns:mes="message" > 
       <mes:Rcvr><xsl:value-of select="$Rcvr"/></mes:Rcvr> 
       <xsl:apply-templates select="@*|node()" /> 
      </mes:Fichier> 
     </xsl:copy> 
    </xsl:template> 


    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
+1

정확히'$ fileList'의 내용은 무엇입니까? 또한 XSLT 2.0 프로세서를 사용하고 있습니까? –

+0

$ fileList는 지금 사용하지 않고 "document (file1.xml) | document (file2.xml)"와 같은 내 파일 목록을이 param에 넣을 수는 있지만 확실하지는 않습니다. 예. XSLT 2.0을 사용할 수 있습니다. 프로세서. 당신보다 @ michael.hor257k –

+0

나는 당신의 질문이 무엇인지 이해하지 못합니다. '$ fileList'에'tokenize()'를 사용하거나'collection()'함수를 살펴 보시기 바랍니다. –

답변

1

그래서 당신이 파일의 무리에 읽고 그들을 변환, 두 가지 작업을해야합니다. 당신이 읽고 file*.xml라는 이름의 모든 파일을 처리하는

<xsl:template match="/"> 
     <mes:Fichier xmlns:mes="message" > 
      <mes:Rcvr><xsl:value-of select="$Rcvr"/></mes:Rcvr> 
      <xsl:apply-templates select="collection('.?select=file*.xml')/node()" /> 
     </mes:Fichier> 
</xsl:template> 

<xsl:template match="/"> 
    <xsl:copy> 
     <mes:Fichier xmlns:mes="message" > 
      <mes:Rcvr><xsl:value-of select="$Rcvr"/></mes:Rcvr> 
      <xsl:apply-templates select="@*|node()" /> 
     </mes:Fichier> 
    </xsl:copy> 
</xsl:template> 

를 대체 할 수있는 XSLT 프로세서로 색슨 (9) 가정.

그런 다음 변환을 위해 예를 들어

<xsl:template match="*"> 
    <xsl:element name="doc:{local-name()}" namespace="Forward"> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:element> 
</xsl:template> 

당신은 당신이 접두사를 추가 할 네임 스페이스에 일치하는 제한해야 할 수도 있습니다 관련된 더 네임 스페이스가있는 경우. 그리고 새로운 루트 요소의 네임 스페이스 선언을 스타일 시트의 루트 요소로 옮기는 것이 좋습니다.

+1

'collection'은 XPath 2.0 이상에서 정의 된 함수이며 XSLT 2.0 이상 및 XQuery 1.0 이상에서 사용할 수 있습니다. 파일을 읽는 특별한 인수는 Saxon 9에만 해당됩니다. http://saxonica.com/html/documentation/sourcedocs/collections.html을 참조하십시오. 예를 들어 데이터베이스에서 '수집'의 데이터베이스 지향적 사용. BaseX 또는 Marklogic에는 다른 기능이있을 수 있습니다. –

+0

'collection' 함수의 정의에 대해서는 https://www.w3.org/TR/xquery-operators/#func-collection을 참조하십시오.하지만 특정 URI의 사용은 프로세서에 따라 다릅니다. –