堆栈溢出错误

时间:2013-11-25 12:00:01

标签: xslt-1.0

我正在尝试加入一个XML文件到另一个,我找到了如何执行此操作的示例。

我正在使用Altova的XML-Spy(主页)。这是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 个答案:

答案 0 :(得分: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>