如何在程序中生成DTD(100分)

B

booboo

Unregistered / Unconfirmed
GUEST, unregistred user!
我要在程序中生成一个XML文件,其中使用了DTD,我用的是微软的msxml.dll,请问
如何生成DTD部分?
 
DTD 有两种方法和 XML 关联起来
1.内部 DTD,就是把 DTD 放在 XML 中,例如
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
2.外部 DTD,即把 DTD 放在一个文件中,在 XML 指明 DTD 的文件名,例如:
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
以上例子摘自 xml101.com
 
我想问的是如何用程序生成DTD,就像生成一个元素可以这样写:
root:=XMLDOC.createElement('Root');
XMLDOC.AppendChild(root);
那么DTD应该怎样生成呢?
 
DTD和XML就是一堆字符串,按照XML规则拼接一下字符串,
最后一起load一下就可以了.
 
MSXML的doctype是只读的.我想能不能像用createElement似的来创建DTD声明
 
可不可以考虑用Schema,这样就可以采用
root:=XMLDOC.createElement('Root');
XMLDOC.AppendChild(root);
的方式,而且我认为Schema比dtd的可操作性要强。
 
djjsl兄,你写的代码只生成了一个根节点,那么如何把schema加上去呢?
 
因为schema也是xml文件,所以完全可以象生成xml文件的方式
生成schema。
 
多谢各位
 
当然不用DTD改用schema是个变通的方法,用Msxml2.XMLSchemaCache对象.
但是,也许创建DTD说明也是可能的.
先生成个带DTD说明的,有个空的节点文档,然后删了空的根节点,加入您的内容.
xmlDoc.loadXML('<?xml version="1.0"?><!DOCTYPE note SYSTEM "note.dtd"><NOTHING/>');
xmlDoc.removeChild(xmlDoc.documentElement);
xmlDoc.appendChild(...);

我没有试验过,您可以试验一下.看看行不行.
 
顶部