2014-12-09 1 views
1

원래 질문은 here이며, 이제는 색소폰으로 약간 수정되었습니다. 나는 XSL 어트 변환을 다음과 같은 한 : 나는 색슨 8 변압기와 함께이 프로그램을 실행할 때입력하지 않고 XSLT 변환 saxon 구문을 사용하여 XML

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:saxon="http://saxon.sf.net/"> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:param name="products"> 
    &lt;products author=&quot;Jesper&quot;&gt; 
     &lt;product id=&quot;p1&quot;&gt; 
     &lt;name&gt;Delta&lt;/name&gt; 
     &lt;price&gt;800&lt;/price&gt; 
     &lt;stock&gt;4&lt;/stock&gt; 
     &lt;country&gt;Denmark&lt;/country&gt; 
     &lt;/product&gt; 
     &lt;product id=&quot;p2&quot;&gt; 
     &lt;name&gt;Golf&lt;/name&gt; 
     &lt;price&gt;1000&lt;/price&gt; 
     &lt;stock&gt;5&lt;/stock&gt; 
     &lt;country&gt;Germany&lt;/country&gt; 
     &lt;/product&gt; 
     &lt;product id=&quot;p3&quot;&gt; 
     &lt;name&gt;Alfa&lt;/name&gt; 
     &lt;price&gt;1200&lt;/price&gt; 
     &lt;stock&gt;19&lt;/stock&gt; 
     &lt;country&gt;Germany&lt;/country&gt; 
     &lt;/product&gt; 
     &lt;product id=&quot;p4&quot;&gt; 
     &lt;name&gt;Foxtrot&lt;/name&gt; 
     &lt;price&gt;1500&lt;/price&gt; 
     &lt;stock&gt;5&lt;/stock&gt; 
     &lt;country&gt;Australia&lt;/country&gt; 
     &lt;/product&gt; 
     &lt;!-- p5 is a brand new product --&gt; 
     &lt;product id=&quot;p5&quot;&gt; 
     &lt;name&gt;Tango&lt;/name&gt; 
     &lt;price&gt;1225&lt;/price&gt; 
     &lt;stock&gt;3&lt;/stock&gt; 
     &lt;country&gt;Japan&lt;/country&gt; 
     &lt;/product&gt; 
    &lt;/products&gt; 
    </xsl:param> 
    <xsl:param name="XMLproducts" select="saxon:parse($products)"></xsl:param> 
    <xsl:template match="@*|node()" > 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="products"> 
    <xsl:copy> 
     <xsl:attribute name="dateUpdated"> 
     <xsl:value-of select="current-dateTime()" /> 
     </xsl:attribute> 
     <xsl:apply-templates select="@*|node()" /> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="/" name="initial"> 
    <xsl:apply-templates select="$XMLproducts"/> 
    </xsl:template> 
</xsl:stylesheet> 

, 나는 java.lang.StackOverflowError의를 얻을. 왜 이런 일이 일어나고 있으며 어떻게 해결할 수 있을지 생각해보십시오.

답변

1

문서를 구성하고 문서를 다시 작성하고 문서 노드에 템플리트를 적용하는 등 문서 노드에 템플리트를 적용하십시오.

그래서 그 문제를 방지하기 위해

<xsl:template match="/" name="initial"> 
    <xsl:apply-templates select="$XMLproducts/node()"/> 
    </xsl:template> 

를 사용합니다.

+0

실제로 해결되었습니다. 고맙습니다! –