【问题标题】:How to use DTD and XSL in the same XML如何在同一个 XML 中使用 DTD 和 XSL
【发布时间】:2017-12-11 05:45:53
【问题描述】:

我试图通过使用 XSL 来显示我的 XML,同时为了使我的 XML 格式正确,我使用了 DTD。问题是每当我将 DTD 链接放在 XML 上时,网页就会变为空白。如果我删除 DTD 链接,一切正常。如何结合 DTD 和 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="bs123@ikasle.ehu.eus" 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>

【问题讨论】:

  • 这是完整的 DTD 吗?您确定它没有在根元素或其他一些元素上另外声明xmlns="..." 属性吗?
  • 您的 DTD 无效。它不能包含#PCDATA 输入ATTLLIST。我想它需要改为CDATA。

标签: xml xslt dtd


【解决方案1】:

一般语法如下:

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

参数:

顶级元素 - 表示文档中的顶级元素,对于 HTML,这是标签。

Publicity - 对象是公共的(值 PUBLIC)或系统资源(值 SYSTEM),例如本地文件。对于 HTML / XHTML,指定值 PUBLIC。

注册 - 报告 DTD 的开发者已在国际标准化组织 (ISO) 注册。它采用以下两个值之一:加号 (+) - 开发人员已在 ISO 中注册, - (减号) - 开发人员未注册。对于 W3C,该值设置为“-”。

组织 - 开发 DTD 的组织的唯一名称。正式地,HTML/XHTML 发布了 W3C,这个名字是用 .

Type - 所描述文档的类型。对于 HTML / XHTML,值由 DTD 指定。

名称 - 描述 DTD 的文档的唯一名称。

语言 - 用于描述对象的文本。包含两个字母,大写。 HTML (XHTML) 文档指定英语 (EN)。

URL - 带有 DTD 的文档。

所以在你的情况下,如果 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="bs123@ikasle.ehu.eus" mota="DiruS">                        
            <kontzeptua>Lanean irabazitakoa</kontzeptua>     
            <kantitatea>4000.0</kantitatea>
    </trantzakzioa>
</trantzakzioak>

结果你会看到如下:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    相关资源
    最近更新 更多