2013-11-25 165 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>