2013-04-14 2 views
1

XML 파일을로드하면 데이터가 표시되지 않습니다. 그것은 XSL 파일을 사용하지 않는 것, 그냥 빈 화면이 나타납니다. 제발 누군가가 외모를 가지고 왜 이런 일을 할 수 있는지 알아보십시오. 미리 감사드립니다. Heres는XSL을 사용하여 XML이 표시되지 않음

내 코드 :

XML :

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="computers.xsl"?> 
<!DOCTYPE computers SYSTEM "computers.dtd"> 
<computers> 
    <computer> 
    <cpu ghz="3.5" unlocked="Yes">Intel i7 3770k</cpu> 
    <motherboard>MSI M-Power</motherboard> 
    <ram>8</ram> 
    <storage> 
     <hdd>1000</hdd> 
     <ssd>128</ssd> 
    </storage> 
    <gpu group="ATI">7950</gpu> 
    <psu>750</psu> 
</computer> 
<computer> 
    <cpu ghz="3.5" unlocked="Yes">Intel i5 3570k</cpu> 
    <motherboard>ASRock Extreme 4</motherboard> 
    <ram>8</ram> 
    <storage> 
     <hdd>1000</hdd> 
    </storage> 
    <gpu group="ATI">7870</gpu> 
    <psu>600</psu> 
</computer> 
<computer> 
    <cpu ghz="3.5" unlocked="No">Intel i5 3550</cpu> 
    <motherboard>ASRock Extreme 3</motherboard> 
    <ram>8</ram> 
    <storage> 
     <hdd>500</hdd> 
    </storage> 
    <gpu group="GeForce">9600GT</gpu> 
    <psu>500</psu> 
</computer> 
</computers> 

DTD :

<!ELEMENT computer (cpu,motherboard,ram,storage,gpu,psu) > 
<!ELEMENT cpu (#PCDATA)> 
<!ELEMENT motherboard (#PCDATA)> 
<!ELEMENT ram (#PCDATA)> 
<!ELEMENT storage(hdd,ssd*)> 
<!ELEMENT hdd (#PCDATA)> 
<!ELEMENT ssd (#PCDATA)> 
<!ELEMENT gpu (#PCDATA)> 
<!ELEMENT psu (#PCDATA)> 

<!ATLIST cpu 
ghz CDATA #REQUIRED 
unlocked (Yes|No) "No"> 
<!ATLIST gpu 
group (ATI|GeForce) "ATI"> 

XSL :

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<html> 
<head> 
    <title>HELLO WORLD</title> 
</head> 
<body> 
    <xsl:for-each select="computers/computer"> 
     <table border="1"> 
      <tr> 
       <td> 
        <xsl:value-of select="cpu"/> 
       </td> 
       <td> 
        <xsl:value-of select="cpu/@ghz"/> 
       </td> 
       <td> 
        <xsl:value-of select="cpu/@unlocked"/> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <xsl:value-of select="motherboard"/> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <xsl:value-of select="ram"/> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <xsl:for-each select="storage"/> 
         <xsl:value-of select="hdd"/> 
         <xsl:value-of select="ssd"/> 
        </xsl:for-each> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <xsl:value-of select="gpu"/> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <xsl:value-of select="psu"/> 
       </td> 
      </tr> 
     </table> 
    </xsl:for-each> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

답변

1

잘못된 형식의 XML 문서가 아닌 XSLT 스타일 시트 외에도 다른 문제는없는 것으로 보입니다. - 그것이 사용되지 않습니다

   <xsl:for-each select="storage"/> 

<!DOCTYPE computers SYSTEM "computers.dtd"> 소스 XML 문서에서

   <xsl:for-each select="storage"> 

2. 제거과 :

1 라인 (33)에 교체 XSLT 변환이 필요하지 않습니다. XSLT 변환은 ID 속성에 대한 DTD 데이터 만 사용하며 제공되는 DTD에는 아무 것도 없습니다. 이 교체 및 제거 후

는 변환은 문제없이 실행하고 제공된 XML 문서에 적용 할 때 :

:

<computers> 
    <computer> 
     <cpu ghz="3.5" unlocked="Yes">Intel i7 3770k</cpu> 
     <motherboard>MSI M-Power</motherboard> 
     <ram>8</ram> 
     <storage> 
      <hdd>1000</hdd> 
      <ssd>128</ssd> 
     </storage> 
     <gpu group="ATI">7950</gpu> 
     <psu>750</psu> 
    </computer> 
    <computer> 
     <cpu ghz="3.5" unlocked="Yes">Intel i5 3570k</cpu> 
     <motherboard>ASRock Extreme 4</motherboard> 
     <ram>8</ram> 
     <storage> 
      <hdd>1000</hdd> 
     </storage> 
     <gpu group="ATI">7870</gpu> 
     <psu>600</psu> 
    </computer> 
    <computer> 
     <cpu ghz="3.5" unlocked="No">Intel i5 3550</cpu> 
     <motherboard>ASRock Extreme 3</motherboard> 
     <ram>8</ram> 
     <storage> 
      <hdd>500</hdd> 
     </storage> 
     <gpu group="GeForce">9600GT</gpu> 
     <psu>500</psu> 
    </computer> 
</computers> 

다음과 같은 결과를 생산 (I 추측하는 것은 희망이됩니다)

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

     <title>HELLO WORLD</title> 
    </head> 
    <body> 
     <table border="1"> 
     <tr> 
      <td>Intel i7 3770k</td> 
      <td>3.5</td> 
      <td>Yes</td> 
     </tr> 
     <tr> 
      <td>MSI M-Power</td> 
     </tr> 
     <tr> 
      <td>8</td> 
     </tr> 
     <tr> 
      <td>1000128</td> 
     </tr> 
     <tr> 
      <td>7950</td> 
     </tr> 
     <tr> 
      <td>750</td> 
     </tr> 
     </table> 
     <table border="1"> 
     <tr> 
      <td>Intel i5 3570k</td> 
      <td>3.5</td> 
      <td>Yes</td> 
     </tr> 
     <tr> 
      <td>ASRock Extreme 4</td> 
     </tr> 
     <tr> 
      <td>8</td> 
     </tr> 
     <tr> 
      <td>1000</td> 
     </tr> 
     <tr> 
      <td>7870</td> 
     </tr> 
     <tr> 
      <td>600</td> 
     </tr> 
     </table> 
     <table border="1"> 
     <tr> 
      <td>Intel i5 3550</td> 
      <td>3.5</td> 
      <td>No</td> 
     </tr> 
     <tr> 
      <td>ASRock Extreme 3</td> 
     </tr> 
     <tr> 
      <td>8</td> 
     </tr> 
     <tr> 
      <td>500</td> 
     </tr> 
     <tr> 
      <td>9600GT</td> 
     </tr> 
     <tr> 
      <td>500</td> 
     </tr> 
     </table> 
    </body> 
</html> 

IE, FF, Safari 및 Opera는 computers.xml을 올바르게 처리하고 원하는 디스플레이을 생성합니다.

Chrome에는 아무런 문제가 없습니다.이 브라우저는 로컬 파일을 처리 할 때 문제가있는 것으로 알려져 있습니다.

+0

다른 브라우저 (duh)를 사용하여 확인하지 않았습니다. 파이어 폭스로 시도해 봤는데 괜찮 았어. 고마워. – edcarr

+0

@edcarr, 오신 것을 환영합니다. –

2
귀하의 XSLT가 잘 형성되지

및 XSLT 프로세서 (나는 그것이 눈썹이라고 생각한다. 어쩌면 그냥 처리하는 것을 거부하는 것일 수도 있습니다. 이 for-each에서 슬래시를 제거해야합니다 :

<xsl:for-each select="storage"/> 

당신은 내가 XSLT가 성공적으로 작동 할 것이라고 믿고, 그렇게되면

.

+0

답변 주셔서 감사하지만 해결되지 않았습니다. 마크 업과 관련된 다른 문제를 볼 수 있습니까? – edcarr

관련 문제