2014-12-08 4 views
0

xslt 템플릿을 적용하여 서식이 지정된 xml을 보려고 할 때 오류가 발생했습니다.£ 및 오류 XSLT

는 XML은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="HandOffForms.xslt"?><form xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <requestor>ab000186</requestor> <depositList><deposit> <siteReference><![CDATA[1]]></siteReference> <postOffice><![CDATA[1]]></postOffice><tcRef><![CDATA[£]]></tcRef><depositDate>12/12/1212</depositDate><depositValue>1.00</depositValue></deposit></depositList></form> 

XSLT :

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
<xsl:output method="xml" version="1.0" 
encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/"> 
     <html> 
      <body> 
       <table border="1" width="720px"> 
        <tr> 
         <th colspan="2" style="background-color:#E8E8E8;height:21px;border:0;border-top:1px solid #fff;margin:0;font-family:verdana;font-size: 11px;text-align:left;">Additional Information</th> 
        </tr> 
        <tr bgcolor="#F8F8F8"> 
         <th style="font-family:verdana;font-size:11;text-align:left;color:#E80000;border:solid 1px #E80000">Attribute</th> 
         <th style="font-family:verdana;font-size:11;text-align:center;color:#E80000;border:solid 1px #E80000">Value</th> 
        </tr> 
        <xsl:for-each select="form/*"> 

        <xsl:variable name="nodoNombre" select="local-name()"></xsl:variable> 

        <xsl:if test="$nodoNombre!='depositList' and $nodoNombre!='chequeList' and $nodoNombre!='bagList'"> 
        <tr> 
          <xsl:variable name="css-estilo"> 
           <xsl:choose> 
            <xsl:when test="position() mod 2 = 1">font-family:verdana;font-size:11;border:solid 0px #F0F0F0;background-color:#F1F1F1</xsl:when> 
            <xsl:otherwise>font-family:verdana;font-size:11;border:solid 0px #F0F0F0;background-color:#FFFFFF</xsl:otherwise> 
           </xsl:choose> 
          </xsl:variable> 
          <td style="{$css-estilo}"> 
          <xsl:choose> 
            <xsl:when test="local-name() = 'requestor'">Requestor</xsl:when> 
            <xsl:when test="local-name() = 'queryType'">Query Type</xsl:when> 
            <xsl:when test="local-name() = 'channel'">Channel</xsl:when> 
            <xsl:when test="local-name() = 'siteReference'">Site Reference</xsl:when> 
            <xsl:when test="local-name() = 'siteReference' or local-name() = 'siteRef'">Site Reference</xsl:when> 
            <xsl:when test="local-name() = 'depositDate'">Deposit Date</xsl:when> 
            <xsl:when test="local-name() = 'depositValue'">Deposit Value</xsl:when> 
            <xsl:when test="local-name() = 'sitePost'">Site Post</xsl:when> 
            <xsl:when test="local-name() = 'deliveryProof'">Delivery Proof</xsl:when> 
            <xsl:when test="local-name() = 'discrepancyValue'">Discrepancy Value</xsl:when> 
            <xsl:when test="local-name() = 'discrepancyDate'">Discrepancy Date</xsl:when> 
            <xsl:when test="local-name() = 'valOrderPlaced'">Value Order Placed</xsl:when> 
            <xsl:when test="local-name() = 'orderRefNumber'">Order Reference Number</xsl:when> 
            <xsl:when test="local-name() = 'valOrderReceived'">Value Order Received</xsl:when> 
            <xsl:when test="local-name() = 'G4S_site'">G4S site</xsl:when> 
            <xsl:when test="local-name() = 'payeeHolding'">Payee Holding</xsl:when> 
            <xsl:when test="local-name() = 'contactName'">Contact Name</xsl:when> 
            <xsl:when test="local-name() = 'contactPhoneNum'">Contact Phone Number</xsl:when>     
            <xsl:when test="local-name() = 'carrier'">Carrier</xsl:when>   
            <xsl:when test="local-name() = 'cageSealNumber'">Cage Seal Number</xsl:when> 
            <xsl:otherwise> 
             <xsl:value-of select="local-name()"/> 
            </xsl:otherwise> 
           </xsl:choose> 
         </td> 
          <td style="{$css-estilo}"> 
          <xsl:choose> 
           <xsl:when test="local-name() = 'discrepancyDate'"> 
            <xsl:call-template name="reformatDateTimeUKtoDate"> 
             <xsl:with-param name="dateTime" select="."/> 
            </xsl:call-template> 
           </xsl:when> 
           <xsl:when test="local-name() = 'valOrderPlaced'"> 
            &#163; <xsl:value-of select="."/> 
           </xsl:when> 
           <xsl:when test="local-name() = 'valOrderReceived'"> 
            &#163; <xsl:value-of select="."/> 
           </xsl:when> 
           <xsl:when test="local-name() = 'depositValue'"> 
            &#163; <xsl:value-of select="."/> 
           </xsl:when> 
           <xsl:when test="local-name() = 'discrepancyValue'"> 
            &#163; <xsl:value-of select="."/> 
           </xsl:when> 
           <xsl:when test="local-name() = 'payeeHolding'"> 
            <xsl:call-template name="formatAcc"> 
             <xsl:with-param name="requestor" select="."/> 
            </xsl:call-template> 

           </xsl:when>           
           <xsl:otherwise> 
            <xsl:value-of select="."/> 
           </xsl:otherwise> 
          </xsl:choose> 
          </td> 
         </tr> 

        </xsl:if> 

        <xsl:if test="$nodoNombre='depositList'"> 

        <table border="1" width="720px"> 
        <br></br> 
        <br></br>     
        <tr> 
         <!--<th colspan="2" style="font-family:verdana;font-size:11;text-align:left;background-color:#C0C0C0"><b>Additional Information</b></th>--> 
         <th colspan="5" style="background-color:#E8E8E8;height:21px;border:0;border-top:1px solid #fff;margin:0;font-family:verdana;font-size: 11px;text-align:left;">Deposit List</th> 
        </tr> 
        <tr bgcolor="#F8F8F8"> 
         <th style="font-family:verdana;font-size:11;text-align:left;color:#E80000;border:solid 1px #E80000">Site Reference</th> 
         <th style="font-family:verdana;font-size:11;text-align:center;color:#E80000;border:solid 1px #E80000">Post Office</th> 
         <th style="font-family:verdana;font-size:11;text-align:center;color:#E80000;border:solid 1px #E80000">TC Reference</th> 
         <th style="font-family:verdana;font-size:11;text-align:center;color:#E80000;border:solid 1px #E80000">Deposit Date</th> 
         <th style="font-family:verdana;font-size:11;text-align:center;color:#E80000;border:solid 1px #E80000">Deposit Value</th> 
        </tr> 

         <xsl:for-each select="/form/depositList/deposit"> 
          <tr> 
          <xsl:variable name="css-estilo"> 
           <xsl:choose> 
            <xsl:when test="position() mod 2 = 1">font-family:verdana;font-size:11;border:solid 0px #F0F0F0;background-color:#F1F1F1</xsl:when> 
            <xsl:otherwise>font-family:verdana;font-size:11;border:solid 0px #F0F0F0;background-color:#FFFFFF</xsl:otherwise> 
           </xsl:choose> 
          </xsl:variable> 
         <td style="{$css-estilo}"> 

           <xsl:value-of select="./siteReference"/> 
         </td> 
          <td style="{$css-estilo}"> 
           <xsl:value-of select="./postOffice"/> 
          </td> 

          <td style="{$css-estilo}"> 
           <xsl:value-of select="./tcRef"/> 
          </td> 


          <td style="{$css-estilo}"> 
          <xsl:call-template name="reformatDateTimeUKtoDate"> 
              <xsl:with-param name="dateTime" select="./depositDate"/> 
          </xsl:call-template> 
          </td> 


          <td style="{$css-estilo}"> 
           &#163; <xsl:value-of select="./depositValue"/> 
          </td> 
         </tr> 
         </xsl:for-each> 

        </table> 
        </xsl:if> 


        <xsl:if test="$nodoNombre='chequeList'"> 

        <table border="1" width="720px"> 
        <br></br> 
        <br></br> 
        <tr> 
         <!--<th colspan="2" style="font-family:verdana;font-size:11;text-align:left;background-color:#C0C0C0"><b>Additional Information</b></th>--> 
         <th colspan="3" style="background-color:#E8E8E8;height:21px;border:0;border-top:1px solid #fff;margin:0;font-family:verdana;font-size: 11px;text-align:left;">Cheque List</th> 
        </tr> 
        <tr bgcolor="#F8F8F8"> 
         <th style="font-family:verdana;font-size:11;text-align:left;color:#E80000;border:solid 1px #E80000">Cheque Number</th> 
         <th style="font-family:verdana;font-size:11;text-align:center;color:#E80000;border:solid 1px #E80000">Cheque Value</th> 
         <th style="font-family:verdana;font-size:11;text-align:center;color:#E80000;border:solid 1px #E80000">Cheque Date</th> 
        </tr> 

         <xsl:for-each select="/form/chequeList/cheque"> 
          <tr> 
          <xsl:variable name="css-estilo"> 
           <xsl:choose> 
            <xsl:when test="position() mod 2 = 1">font-family:verdana;font-size:11;border:solid 0px #F0F0F0;background-color:#F1F1F1</xsl:when> 
            <xsl:otherwise>font-family:verdana;font-size:11;border:solid 0px #F0F0F0;background-color:#FFFFFF</xsl:otherwise> 
           </xsl:choose> 
          </xsl:variable> 
         <td style="{$css-estilo}"> 

           <xsl:value-of select="./chequeNumber"/> 
         </td> 
          <td style="{$css-estilo}"> 
           &#163; <xsl:value-of select="./chequeVal"/> 
          </td> 

          <td style="{$css-estilo}"> 
           <xsl:call-template name="reformatDateTimeUKtoDate"> 
            <xsl:with-param name="dateTime" select="./chequeDate"/> 
          </xsl:call-template> 
          </td> 

         </tr> 
         </xsl:for-each> 

        </table> 
        </xsl:if> 

        <xsl:if test="$nodoNombre='bagList'"> 

        <table border="1" width="720px"> 
        <br></br> 
        <br></br> 
        <tr> 
         <!--<th colspan="2" style="font-family:verdana;font-size:11;text-align:left;background-color:#C0C0C0"><b>Additional Information</b></th>--> 
         <th colspan="3" style="background-color:#E8E8E8;height:21px;border:0;border-top:1px solid #fff;margin:0;font-family:verdana;font-size: 11px;text-align:left;">Bag list</th> 
        </tr> 
        <tr bgcolor="#F8F8F8"> 
         <th style="font-family:verdana;font-size:11;text-align:left;color:#E80000;border:solid 1px #E80000">Bag Number</th> 
        </tr> 

         <xsl:for-each select="/form/bagList/*"> 
          <tr> 
          <xsl:variable name="css-estilo"> 
           <xsl:choose> 
            <xsl:when test="position() mod 2 = 1">font-family:verdana;font-size:11;border:solid 0px #F0F0F0;background-color:#F1F1F1</xsl:when> 
            <xsl:otherwise>font-family:verdana;font-size:11;border:solid 0px #F0F0F0;background-color:#FFFFFF</xsl:otherwise> 
           </xsl:choose> 
          </xsl:variable> 
         <td style="{$css-estilo}"> 
           <xsl:value-of select="."/> 
         </td> 

         </tr> 
         </xsl:for-each> 

        </table> 
        </xsl:if>     

        </xsl:for-each> 
       </table> 
      </body> 
     </html> 


    </xsl:template> 
    <xsl:template name="reformatDateTimeUKtoDate"> 
     <!-- Expected format 20-08-2010 11:11:30:000000 --> 
     <!-- Expected output 20-08-2010 --> 
     <xsl:param name="dateTime"/> 
     <xsl:value-of select="substring($dateTime,1,10)"/> 
    </xsl:template> 
    <xsl:template name="formatAcc"> 
     <xsl:param name="requestor"/> 
     <xsl:value-of select="translate(substring-after($requestor, ':'), ':' , ' ')"/> 
    </xsl:template> 



</xsl:stylesheet> 

£ 들어있는 tcRef 태그를 가져올 때 문제입니다. 즉, 로컬의 "£"가 표시된다

enter image description here

적절한 인코딩 설정되어야? 우리의 응용 프로그램에서 테스트하려고 할 때

, IE는 오류를 표시 :

The XML page cannot be displayed 
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later. 


-------------------------------------------------------------------------------- 

An invalid character was found in text content. Error processing resource 'http://abb.com... 

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://abb.com 

enter image description here

+0

무슨 일이 일어나는지 명확하지 않습니다. 데이터를 제공하는 것은 무엇입니까? 파일이 로컬에있는 경우에도 동일한 문제가 발생합니까? XML 만 처리하는 브라우저입니까? –

+0

XSLT를 게시하십시오. –

+2

파일이 실제로 UTF-8 인코딩을 사용하고 있습니까? 프롤로그에서 인코딩을 선언하는 것으로는 충분하지 않습니다 ... –

답변

0

는 아마도 서버가 Content-Type 헤더에 잘못된 문자 집합을 보내고있다. 템플릿에있는 이 다음과 같이 포함 된 경우 다음을 포함하여 다음을 포함 할 수 있습니다.

<head> 
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" /> 
</head>