2016-10-20 4 views
0

안녕하세요. 내 XSL이 내 XML에서 작동하지 않는 것 같습니다. 내 코드가 아주 간단하더라도 문제를 파악할 수없는 것 같습니다. 내 XML 시트는 XSL 스프레드 시트에 링크하고 문서를 열 때 원시 데이터로 변환되는 것처럼 보입니다.XSLT가 내 XML과 작동하지 않습니다.

내 XSL

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output method="html"/> 

<xsl:template match="/"> 
<html> 
<head> 
    <title>Room Information</title> 
</head> 
<body> 
    <h1>Room information</h1> 
    <table border="1"> 
    <tr bgcolor="#9acd32"> 
    <th>TITLE</th> 
    <th>ACCOMODATION</th> 
    <th>COST</th> 
    <th>LEVEL</th> 
    <th>VIEW</th> 
    <th>ENSUITE</th> 
    <th>MAID_SERVICE</th> 
    <th>ROOM_SERVICE</th> 
    <th>LAUNDRY_SHOOT</th> 
    <th>ROOM_IMAGE</th> 
    <th>PAST_CUSTOMERS</th> 
    </tr> 
<xsl:for-each select="ROOMS/ROOM"> 
      <tr> 
       <td><xsl:value-of select="TITLE"/></td> 
       <td><xsl:value-of select="ACCOMODATION"/></td> 
       <td><xsl:value-of select="COST"/></td> 
       <td><xsl:value-of select="LEVEL"/></td> 
       <td><xsl:value-of select="VIEW"/></td> 
       <td><xsl:value-of select="ENSUITE"/></td> 
       <td><xsl:value-of select="MAID_SERVICE"/></td> 
       <td><xsl:value-of select="ROOM_SERVICE"/></td> 
       <td><xsl:value-of select="LAUNDRY_SHOOT"/></td> 
       <td><xsl:value-of select="ROOM_IMAGE"/></td> 
       <td><xsl:value-of select="PAST_CUSTOMERS"/></td> 
      </tr> 

</xsl:for-each> 

이 (DTD는 단지 무시 될 수있다) 내 XML입니다

?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="XSL/RoomsXSL.xsl"?> 

<!DOCTYPE ROOMS [ 
<!ELEMENT ROOM (TITLE+,ACCOMODATION,COST,LEVEL+,VIEW,ENSUITE,MAID_SERVICE,ROOM_SERVICE,LAUNDRY_SHOOT,ROOM_IMAGE+,PAST_CUSTOMERS+)> 
<!ELEMENT TITLE (#PCDATA)> 
<!ELEMENT ACCOMODATION (#PCDATA)> 
<!ELEMENT COST (#PCDATA)> 
<!ELEMENT LEVEL (#PCDATA)> 
<!ELEMENT VIEW (#PCDATA)> 
<!ELEMENT ENSUITE (#PCDATA)> 
<!ELEMENT MAID_SERVICE (#PCDATA)> 
<!ELEMENT ROOM_SERVICE (#PCDATA)> 
<!ELEMENT LAUNDRY_SHOOT (#PCDATA)> 
<!ELEMENT ROOM_IMAGE (#PCDATA)> 
<!ELEMENT PAST_CUSIMERS (#PCDATA)> 

<!ENTITY writer "Dylan Weiss"> 
<!ENTITY copyright "Horizon BnB"> 
]> 

<ROOMS> 
    <ROOM id="01"> 
    <TITLE>Top Floor 1</TITLE> 
    <ACCOMODATION>Accomodates 2 people</ACCOMODATION> 
    <COST>$700 a week.$120 every day over a week</COST> 
    <LEVEL>Top floor</LEVEL> 
    <VIEW>Includes panoramic View</VIEW> 
    <ENSUITE>Has ensuite</ENSUITE> 
    <MAID_SERVICE>Maid service included</MAID_SERVICE> 
    <ROOM_SERVICE>Includes room service</ROOM_SERVICE> 
    <LAUNDRY_SHOOT>Includes laundry shoot</LAUNDRY_SHOOT> 
    <ROOM_IMAGE>Images/LuxuryRoom1.jpg</ROOM_IMAGE> 
    <PAST_CUSTOMERS>WWW.Horizon/PastCustomers.com</PAST_CUSTOMERS> 
    </ROOM> 

    <ROOM id="02"> 
    <TITLE>Bottom floor 1</TITLE> 
    <ACCOMODATION>Accomodates 2 people</ACCOMODATION> 
    <COST>$500 a week.$100 every day over a week</COST> 
    <LEVEL>Ground floor</LEVEL> 
    <VIEW>Includes a courtyard</VIEW> 
    <ENSUITE>Has ensuite</ENSUITE> 
    <MAID_SERVICE>Maid service included</MAID_SERVICE> 
    <ROOM_SERVICE>Includes room service</ROOM_SERVICE> 
    <LAUNDRY_SHOOT>No laundry shoot</LAUNDRY_SHOOT> 
    <ROOM_IMAGE>Images/LuxuryRoom1.jpg</ROOM_IMAGE> 
    <PAST_CUSTOMERS>WWW.Horizon/PastCustomers.com</PAST_CUSTOMERS> 
    </ROOM> 

    <ROOM id="03"> 
    <TITLE>Bottom floor 2</TITLE> 
    <ACCOMODATION>Accomodates 4 people</ACCOMODATION> 
    <COST>$800 a week.$120 every day over a week</COST> 
    <LEVEL>Ground floor</LEVEL> 
    <VIEW>Includes a courtyard</VIEW> 
    <ENSUITE>Has ensuite</ENSUITE> 
    <MAID_SERVICE>Maid service included</MAID_SERVICE> 
    <ROOM_SERVICE>Includes room service</ROOM_SERVICE> 
    <LAUNDRY_SHOOT>No laundry shoot</LAUNDRY_SHOOT> 
    <ROOM_IMAGE>Images/LuxuryRoom1.jpg</ROOM_IMAGE> 
    <PAST_CUSTOMERS>WWW.Horizon/PastCustomers.com</PAST_CUSTOMERS> 
    </ROOM> 
</ROOMS> 

답변

1

내가 대신 일치하는 템플릿을 사용하는 것이 좋습니다 것입니다 당신을위한-각 : 루트 템플릿 것 일치하는 ROOMS 템플릿을 당기면 일치가 ROOM이됩니다.

<xsl:apply-template />은 원하는 위치에서 일치하는 템플릿을 가져 오는 데주의를 기울입니다.

요소를 숨길 필요가있는 경우 빈 템플릿 (<xsl:template match="ROOM" />) 만 선언하면됩니다.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="html"/> 

    <xsl:template match="/"> 
     <html> 
      <head> 
       <title>Room Information</title> 
      </head> 
      <body> 
       <h1>Room information</h1> 
       <table border="1"> 
        <tr bgcolor="#9acd32"> 
         <th>TITLE</th> 
         <th>ACCOMODATION</th> 
         <th>COST</th> 
         <th>LEVEL</th> 
         <th>VIEW</th> 
         <th>ENSUITE</th> 
         <th>MAID_SERVICE</th> 
         <th>ROOM_SERVICE</th> 
         <th>LAUNDRY_SHOOT</th> 
         <th>ROOM_IMAGE</th> 
         <th>PAST_CUSTOMERS</th> 
        </tr> 
        <xsl:apply-templates /> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="ROOMS"> 
     <xsl:apply-templates /> 
    </xsl:template> 

    <xsl:template match="ROOM"> 
     <tr> 
      <td> 
       <xsl:value-of select="TITLE"/> 
      </td> 
      <td> 
       <xsl:value-of select="ACCOMODATION"/> 
      </td> 
      <td> 
       <xsl:value-of select="COST"/> 
      </td> 
      <td> 
       <xsl:value-of select="LEVEL"/> 
      </td> 
      <td> 
       <xsl:value-of select="VIEW"/> 
      </td> 
      <td> 
       <xsl:value-of select="ENSUITE"/> 
      </td> 
      <td> 
       <xsl:value-of select="MAID_SERVICE"/> 
      </td> 
      <td> 
       <xsl:value-of select="ROOM_SERVICE"/> 
      </td> 
      <td> 
       <xsl:value-of select="LAUNDRY_SHOOT"/> 
      </td> 
      <td> 
       <xsl:value-of select="ROOM_IMAGE"/> 
      </td> 
      <td> 
       <xsl:value-of select="PAST_CUSTOMERS"/> 
      </td> 
     </tr> 
    </xsl:template> 

</xsl:stylesheet> 
+0

음, 여전히 작동하지 않는 것 같습니다. XML은 내가 XSL을 링크했음을 이해하지만 테이블에 서식을 변경하는 것을 받아들이지 않는 것 같습니다. – Dylan

+0

내 컴퓨터의 IE에서 정상적으로 실행됩니다. 샘플 Xsl에는 첫 번째'<'가 빠졌지 만 복사 - 붙여 넣기 오류라고 가정합니다. – Filburt

+0

그것은 작동합니다! 정말 고마워! – Dylan

관련 문제