2017-12-09 23 views
0

XML을 XSL로 보여주고 XML을 만들기 위해 동시에 DTD를 사용하려고합니다. 문제는 XML에 DTD 링크를 넣을 때마다 웹 페이지가 비어 있다는 것입니다. DTD 링크를 삭제하면 모든 것이 잘 동작합니다. DTD와 XML을 어떻게 결합합니까?DTD와 XSL을 동일한 XML로 사용하는 방법

XML 코드 :

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> 
<?xml-stylesheet type="text/xsl" href="erakutsi.xsl"?> 
<!DOCTYPE trantzakzioak SYSTEM "xml_eskema.xsd"> 

<trantzakzioak> 
    <trantzakzioa erabiltzailea="[email protected]" mota="DiruS">       
      <kontzeptua>Lanean irabazitakoa</kontzeptua>  
      <kantitatea>4000.0</kantitatea> 
    </trantzakzioa> 
</trantzakzioak> 

DTD는 코드 :

<!ELEMENT trantzakzioak (trantzakzioa)*> 
<!ATTLIST trantzakzioak> 
<!ELEMENT trantzakzioa (kontzeptua,kantitatea)> 
<!ATTLIST trantzakzioa erabiltzailea #PCDATA #REQUIRED> 
<!ATTLIST trantzakzioa mota #PCDATA #REQUIRED> 
<!ELEMENT kontzeptua (#PCDATA)> 
<!ELEMENT kantitatea (#PCDATA)> 

XSL 코드 :

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<HTML> 
    <BODY> 
     <h2>Galderak</h2> 
     <TABLE border="1"> 
      <TR> 
       <TH>Testua</TH> 

      </TR> 
      <xsl:for-each select="/trantzakzioak/trantzakzioa" > 
       <TR> 
        <TD><FONT SIZE="2" COLOR="red" FACE="Verdana"> 
         <xsl:value-of select="kontzeptua"/> <BR/> 
         </FONT> 
        </TD> 
       </TR> 
      </xsl:for-each> 
     </TABLE> 
    </BODY> 
</HTML></xsl:template> 
</xsl:stylesheet> 
+0

완전한 DTD입니까? 루트 요소 또는 다른 요소에'xmlns = "..."'속성을 추가로 선언하지 않았습니까? –

+1

DTD가 유효하지 않습니다. 'ATTLLIST'에'# PCDATA' 타입을 포함 할 수 없습니다. 나는 그것을 CDATA로 바꿀 필요가 있다고 생각한다. –

답변

0

일반적 구문은 다음과 같이해야한다 :

<!DOCTYPE [Top-level element] [Publicity] "[Registration]//[Organization]//[Type] [Name]//[Language]" "[URL]"> 

매개 변수 :

최상위 요소 - 문서의 최상위 요소를 나타내며, HTML의 경우 이것은 태그입니다.

공개 - 객체는 public (값 PUBLIC) 또는 시스템 자원 (값 SYSTEM)입니다 (예 : 로컬 파일). HTML/XHTML의 경우 PUBLIC 값이 지정됩니다.

등록 - DTD 개발자가 국제 표준화기구 (ISO)에 등록되었음을보고합니다. plus (+) - 개발자가 ISO에 등록되어 있고 - (마이너스) - 개발자가 등록되지 않았습니다. W3C의 경우 값은 "-"로 설정됩니다.

조직 - DTD를 개발 한 조직의 고유 한 이름. HTML/XHTML은 공식적으로 W3C를 게시하고이 이름을 씁니다.

유형 - 설명 된 문서의 유형. HTML/XHTML의 경우, 값은 DTD에 의해 지정됩니다.

이름 - DTD를 설명하는 문서의 고유 한 이름.

언어 - 개체를 설명하기 위해 텍스트가 쓰여진 언어입니다. 대문자로 쓰여진 두 개의 문자가 들어 있습니다. HTML (XHTML) 문서는 영어 (EN)를 지정합니다.

URL - DTD가있는 문서의 URL입니다. 귀하의 경우 그래서

, 아래 xml_eskema.dtd 경우 :

<!ELEMENT trantzakzioak (trantzakzioa)*> 
<!ATTLIST trantzakzioak> 
<!ELEMENT trantzakzioa (kontzeptua,kantitatea)> 
<!ATTLIST trantzakzioa erabiltzailea CDATA #REQUIRED> 
<!ATTLIST trantzakzioa mota CDATA #REQUIRED> 
<!ELEMENT kontzeptua (#PCDATA)> 
<!ELEMENT kantitatea (#PCDATA)> 

그런 다음 XML의 DOCTYPE 선언은 다음과 같이해야한다 : 당신이 아래를 볼 것이다 결과

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> 
<?xml-stylesheet type="text/xsl" href="erakutsi.xsl"?> 
<!DOCTYPE trantzakzioak PUBLIC '-//W3C//DTD HTML//EN' 'xml_eskema.dtd'> 

<trantzakzioak> 
    <trantzakzioa erabiltzailea="[email protected]" mota="DiruS">       
      <kontzeptua>Lanean irabazitakoa</kontzeptua>  
      <kantitatea>4000.0</kantitatea> 
    </trantzakzioa> 
</trantzakzioak> 

:

enter image description here