以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XML基础 』 (http://bbs.xml.org.cn/list.asp?boardid=1) ---- 存取XML实体与卷标 [推荐] (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=13422) |
-- 作者:卷积内核 -- 发布时间:1/10/2005 3:03:00 PM -- 存取XML实体与卷标 [推荐] 你可以使用未解析实体宣告来将外部数据文件合并至XML 文件中。(所有未解析实体都是以一般外部形态存在。)使用未解析实体的方法,是将实体名称指定到具有ENTITY 或ENTITIES 形态的属性中,作为将外部实体档案与特定的XML 元素结合在一起的方法。XML 处理器并不会存取未解析实体档案。更确切的说,是XML 处理器仅仅让应用程序可以获得实体的描述与卷标,而应用程序则是可以适当地取得并使用这些信息。 本节中提出一个XML 文件和HTML 网页,来显示使用DOM 从XML 文件来撷取实体的数据与描述实体格式卷标的基本步骤。Inventory Entity.xml <?xml version="1.0"?> <!--File Name:Inventory Entity.xml --> <!DOCTYPE INVENTORY [ <!NOTATION TXT SYSTEM "plain text file"> <!ENTITY rev_huck SYSTEM "Review of Huckleberry Finn.txt" NDATA TXT> <!ENTITY rev_leaves SYSTEM "Review of Leaves of Grass.txt" NDATA TXT> <!ENTITY rev_legend SYSTEM "Review of Sleepy Hollow.txt" NDATA TXT> <!ELEMENT INVENTORY (BOOK)*> <!ELEMENT BOOK (TITLE,AUTHOR,BINDING,PAGES,PRICE)> <!ATTLIST BOOK Review ENTITY #IMPLIED> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT AUTHOR (#PCDATA)> <!ELEMENT BINDING (#PCDATA)> <!ELEMENT PAGES (#PCDATA)> <!ELEMENT PRICE (#PCDATA)> ] > <INVENTORY> <BOOK Review="rev_huck"> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR>Mark Twain</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK> <BOOK Review="rev_leaves"> <TITLE>Leaves of Grass</TITLE> <AUTHOR>Walt Whitman</AUTHOR> <BINDING>hardcover</BINDING> <PAGES>462</PAGES> <PRICE>$7.75</PRICE> </BOOK> <BOOK Review="rev_legend"> <TITLE>The Legend of Sleepy Hollow</TITLE> <AUTHOR>Washington Irving</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>98</PAGES> <PRICE>$2.95</PRICE> </BOOK> </INVENTORY> 列表9-7. Inventory Entity.htm <!--File Name:Inventory Entity.htm --> <HTML> <HEAD> <TITLE>Get Entity Information</TITLE> <SCRIPT LANGUAGE="JavaScrip" FOR="window" EVENT="ONLOAD"> Document =dsoInventory.XMLDocument; Attribute = Document.documentElement.childNodes(0).attributes(0); if (Attribute.dataType =="entity") { DisplayText ="'" ++Attribute.nodeName +"'attribute has ENTITY type" ++"\n"; DisplayText +="attribute value =" +Attribute.nodeValue +"\n"; Entity = Document.doctype.entities.getNamedItem(Attribute.nodeValue); DisplayText +="entity file =" +Entity.attributes.getNamedItem("SYSTEM").nodeValue +"\n"; NotationName = Entity.attributes.getNamedItem("NDATA").nodeValue; DisplayText +="entity notation =" ++NotationName +"\n"; Notation = Document.doctype.notations.getNamedItem(NotationName); DisplayText +="notation URI or description =" +Notation.attributes.getNamedItem("SYSTEM ").nodeValue +"\n"; alert (DisplayText); location.href = Entity.attributes.getNamedItem("SYSTEM ").nodeValue; } </SCRIPT> </HEAD> <BODY> <XML ID="dsoInventory" SRC="Inventory Entity.xml"></XML> </BODY> </HTML> 在范例XML 文件中的每个BOOK 元素,包含了一个名为Review 的ENTITY 型态属性,此属性被指定成一个包含特定书籍数据的未解析实体。范例HTML 网页中包含一份script,显示了当DOM script 遇到拥有ENTITY 或ENTITIES 形态的属性时,所必须执行的基本步骤,以撷取所有关于实体的信息。特别是,script 撷取被指定到Review 属性的未解析实体信息,而Review属性位于文件中第一个BOOK 元素中。未解析实体的信息结果由「警告」消息框显示. 下面是script 程序执行的基本步骤的简介: 1. script 得到位于第一个BOOK 元素中代表Review 属性的Attribute 节点: 2. Attribute = Document.documentElement.childNodes(0).attributes(0); 3. script 使用dataType 节点属性(参考 表格9-2 ),来判断此属性是否具有ENTITY 形态: 4. if (Attribute.dataType =="entity") 5. { 6. /*obtain entity information */ } 只有当属性具有ENTITY 形态时,script 才会继续执行接下来的步骤。意即,接下来的步骤皆包含在if 叙述之中,而且只有当if 条件判断成真时才会执行。 7. script 将获得Entity 节点,该节点代表被指派到属性的实体DTD 宣告: Entity =Document.doctype.entities.getNamedItem(Attribute.nodeValu e); Document 属性doctype(在表格9-3 中解释过)提供一个代表文件形态宣告的DocumentType 节点。DocumentType 属性entities 提供一个Entity 节点的NamedNodeMap 集合,此集合代表DTD 中所有的实体宣告。藉由传入实体名称(Attribute.nodeValue)到NamedNodeMap 对象中的方法getNamedItem,我们可以得到代表某指定实体的Entity 节点,其中getNamedItem 方法已于表格9-7 中介绍过。 8. script 会得到实体的系统literal,而系统literal 指明了包含此实体数据文件的URI。系统literal 储存在名为SYSTEM 的Attribute 节点中: 9. DisplayText +="entity file =" 10. +Entity.attributes.getNamedItem("SYSTEM").node Value +"\n"; 11. script 会获得实体卷标的名字,而卷标是储存于名为NDATA 的Attribute 节点中: NotationName = Entity.attributes.getNamedItem("NDATA").nodeValue; 12. script 会得到代表实体卷标宣告的Notation 节点: Notation = Document.doctype.notations.getNamedItem(NotationName); 文件形态属性notations 提供一个名称节点对应集合,此集合包含表示DTD 中符号宣告的符号节点,藉由传入符号名称(NotationName)给名称节点对应中的getNamedItem 方法,得到表示实体符号的符号节点。 13. script 会获得卷标的系统literal,该系统literal 包含了卷标的URI 或如同此例是标签的描述。系统literal 是储存于Attribute 节点SYSTEM 中: 14. DisplayText +="notation URI or description =" 15. +Notation.attributes.getNamedItem("SYSTEM").no deValue +"\n" 16. script 借着「警示」消息框来显示所有的储存结果: alert (DisplayText); 17. script 会借着Internet Explorer 5 开启并显示包含review 的实体档案作为结束。藉由将档案的URI(在第4 步骤中所得到的)指定到HTML 网页的location.href 属性,该URI 设定了目前显示于浏览器中档案的URL 值。 location.href = Entity.attributes.getNamedItem("SYSTEM ").nodeValue; location.href 属性是DHTML 对象模型的一部分,你可以从网页 http://msdn.microsoft.com/workshop/author/default.asp 中取得相关的信息。 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
3,283.203ms |