2013-11-25 4 views
0

Я пытаюсь присоединиться к добавить один файл XML в другой, и я нашел примеры того, как это сделать.Ошибка переполнения стека

Я использую XML-шпион Altova (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

я не понимаю эту проблему, вы говорите, «хотите добавьте «что вы имеете в виду? означает ли это, что вы хотите запустить CC_favourites.xml с помощью XSLT? – nrathaus

+0

BTW: Запуск его с помощью 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> 
Смежные вопросы