2012-09-07 3 views
1

두 xml 파일을 xslt를 사용하여 하나로 병합하고 싶습니다.xslt를 사용하여 두 xml 파일을 병합

file1: 

<cut> <content1> .... </content1> </cut> 

file1: 

<cut> <content2> .... </content2> </cut> 

merged: 
<cut> 
<content1> ... </content1> 
<content2> ... </content2> 
</cut> 

병합 할 파일이 들어있는 xslt에 매개 변수를 전달하고 싶습니다.

xsltproc.exe "--stringparam 파일 1의 : \ file1.xml --stringparam 파일 2의 : \ file2.xml S : \ merge.xslt

merge.xslt: 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:exsl="http://exslt.org/common" 
    extension-element-prefixes="exsl"> 

    <xsl:output indent="yes" omit-xml-declaration="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:param name="file1"/> 
    <xsl:param name="file2"/> 

    <xsl:variable name="big-doc-rtf"> 
    <xsl:copy-of select="document($file1)"/> 
    <xsl:copy-of select="document($file2)"/> 
    </xsl:variable> 

    <xsl:variable name="big-doc" select="exsl:node-set($big-doc-rtf)"/> 

    <xsl:template match="/"> 
    <cut> 
     <xsl:apply-templates select="$big-doc/cut/*"/> 
    </cut> 
    </xsl:template> 

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

    <xsl:template match="@*|text()|comment()|processing-instruction()"> 
    <xsl:copy-of select="."/> 
    </xsl:template> 

</xsl:stylesheet> 
난 단지 빈 얻을

"컷 ". 태그는 무엇이 잘못

답변

1

문제를 repro 수 없습니다

대부분의 아마 당신의 코드 대가 모두 document() 기능?." "아무것도 -이는 URI를 1로 사용되는 것을 의미한다 각 호출의 인수는 파일을 식별하지 못합니다 (파일을 찾을 수 없거나 해결되지 않음). 또는 파일에 올바른 형식의 XML 문서가 없습니다.

0

이것은 documental() 호출에서 하드 코드 된 경로가있는 xalan 및 saxon 파서로 저에게 잘 돌아 왔습니다. 어떤 이유로 xsl에 문서가 표시되지 않을 수 있습니다.

원본 문서에 XML에 문제가있는 것으로 의심됩니다. 오류가 발생하기 쉽기 때문입니다.

xsltproc하지만 xmllint가 사용하지
3

:

(편집 : xsltproc도의 XInclude에게

--xinclude : do XInclude processing on document input 

수 있습니다)

x1.xml

<cut><content1>content1</content1></cut> 

x2.xml

을 012 3,516,
<cut><content2>content2</content2></cut> 

x3.xml

<?xml version="1.0"?> 
<cut xmlns:xi="http://www.w3.org/2003/XInclude"> 
    <xi:include href="x1.xml" parse="xml" xpointer="xpointer(/cut/content1)"/> 
    <xi:include href="x2.xml" parse="xml" xpointer="xpointer(/cut/content2)"/> 
</cut> 

실행 :

$ xmllint -xinclude x3.xml 
<?xml version="1.0"?> 
<cut xmlns:xi="http://www.w3.org/2003/XInclude"> 
    <content1>content1</content1> 
    <content2>content2</content2> 
</cut> 
관련 문제