我正在尝试将一个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>
有人能告诉我我做错了什么吗?
您的脚本包含对匹配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>