2012-09-07 214 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 S:\ file1.xml --stringparam文件2 S:\ 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

不能瑞普問題

最有可能在你的代碼的回報都document()功能?‘一無所有’ - 這意味着,作爲1號的URI每次調用的參數都不會標識文件(無法找到/解析文件),或者該文件不包含格式良好的XML文檔。

0

這對我來說很好,在文檔()調用中帶有硬編碼路徑的xalan和撒克遜分析器。問題可能在於,由於某種原因,您的xsl沒有看到您的文檔。

我懷疑源文檔中的xml存在問題,因爲這可能會引發錯誤。

3

不使用xsltproc的但xmllint

(編輯:xsltproc的也允許的XInclude

--xinclude : do XInclude processing on document input 

x1.xml

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

x2.xml

<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>