2013-11-25 189 views
0

我試圖加入一個XML文件到另一個,我已經找到了如何做到這一點的例子。堆棧溢出錯誤

我正在使用Altova的XML-Spy(home)。這是一份2006年的免費拷貝!

但是當我做轉型失敗,我得到以下信息:XSLT堆棧溢出

這裏是xsl:「updateFavourites.xml」

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:param name="fileName" select=" 'CC_favourites.xml' " /> 
    <xsl:param name="updates" select="document($fileName)" /> 

    <xsl:variable name="updateFavourites" select="$updates/favourites/group" /> 

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

    <xsl:template match="group"> 
    <xsl:copy> 
     <xsl:apply-templates select="group[not(@id = $updateFavourites/@id)]" /> 
     <xsl:apply-templates select="$updateFavourites" /> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

目標文件轉變爲「camper_fav .XML」

<?xml version="1.0" encoding="UTF-8"?> 
<favourites version="1"> 
<group name="camper contact"> 
    <item name="1: Parking" lat="156756060" lon="-3960972"/> 
    <item name="2: Nationale Veenpark" lat="189918180" lon="25290936"/> 
    <item name="3: Zeinissee" lat="169121412" lon="36456228"/> 
    <item name="4: Brasserie De Holle Boom" lat="187314192" lon="19858932"/> 
</group> 
</favourites> 

和源文件,我希望增加 'CC_favourites.xml'

<?xml version="1.0" encoding="UTF-8"?> 
<favourites version="1"> 
    <group name="CC"> 
     <item name="Abbey Wood Caravan Club Site " lat="185350860" lon="430956"/> 
     <item name="Aberbran Caravan Club Site " lat="187035158" lon="-12530027"/> 
     <item name="Alderstead Heath Club Site " lat="184619520" lon="-499968"/> 
     <item name="Gatwick Caravan Club Site " lat="184115484" lon="-727632"/> 
     <item name="Ashridge Club Site " lat="187354760" lon="-511282"/> 
    </group> 
    <group name="CC CL"> 
     <item name="Burnside " lat="205635913" lon="-10403981"/> 
     <item name="Greenpark " lat="205478189" lon="-9216606"/> 
     <item name="Bridge House " lat="206721860" lon="-6786186"/> 
     <item name="Smithy Croft " lat="207530951" lon="-7672927"/> 
     <item name="The Croft Inn " lat="207509940" lon="-7790472"/> 
    </group> 
</favourites> 

請有人可以建議我做錯了什麼?

+1

第一個提的是,標題包括這個網站的名字:) – nrathaus

+0

我不明白的問題,你說「希望添加「你是什麼意思?這是否意味着您想使用XSLT運行CC_favourites.xml? – nrathaus

+0

順便說一句:使用xsltproc(即不同的XSLT處理器)運行它也會顯示太深的嵌套 – nrathaus

回答

0

您的腳本包含對匹配group的模板的遞歸調用。由於沒有明顯的標準來終止遞歸,所以最終會耗盡堆棧內存。

更換匹配模式,以favourites將幫助(雖然未經測試):

<xsl:template match="favourites"> 
    <xsl:copy> 
    <xsl:apply-templates select="group[not(@id = $updateFavourites/@id)]" /> 
    <xsl:apply-templates select="$updateFavourites" /> 
    </xsl:copy> 
</xsl:template>