同时使用xml、schema和xslt的例子

以前从来没有用过 schema, 这次希望能给我的 xml 文件加上 namespace, schema, 然后用 xslt 转换成 html, 没想到花了不少功夫。现在我把工作正常的结果记录下来,希望对大家有些帮助。

先来看看我的 xml 文件。打算用来定义网页的菜单。

<?xml version="1.0" encoding="GB2312"?>
<menu_items>
<menu_item href="index.html" image="images/A1.gif" name="首页"/>
<menu_item href="ep.html" image="images/A2.gif" name="新闻">
    <menu_item href="ep.html" image="images/A2.gif" name="国内新闻"/>
</menu_item>
</menu_items>


很简单的 xml 文件,抛开弯路不提,用 xmlspy 的 Generate Schema 功能自动生成 schema 文件,然后做些小修改,结果如下:

<?xml version="1.0" encoding="GB2312"?>
<xs:schema xmlns="http://www.hz-sp.com/2005/XMLSchema-menu" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.hz-sp.com/2005/XMLSchema-menu">
<xs:element name="menu_item">
  <xs:complexType>
  <xs:sequence>
   <xs:element ref="menu_item" minOccurs="0"/>
  </xs:sequence>
  <xs:attribute name="name" type="xs:string" use="required"/>
  <xs:attribute name="href" type="xs:anyURI" use="optional"/>
  <xs:attribute name="image" type="xs:anyURI" use="optional"/>
  </xs:complexType>
</xs:element>
<xs:element name="menu_items">
  <xs:complexType>
  <xs:sequence>
   <xs:element ref="menu_item" maxOccurs="unbounded"/>
  </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>


其中,http://www.hz-sp.com/2005/XMLSchema-menu是我的namespace. 然后在xml中用xmlspy 的Assign Schema 功能指定这个 xsd ,xml 中的根节点 menu_items 被为:

<menu_items xmlns="http://www.hz-sp.com/2005/XMLSchema-menu" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hz-sp.com/2005/XMLSchema-menu
menu.xsd">


接下来创建 xslt 文件,同样只给出正确的结果:

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xpath-default-namespace="http://www.hz-sp.com/2005/XMLSchema-menu" version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2004/07/xpath-functions" xmlns:xdt="http://www.w3.org/2004/07/xpath-datatypes" xmlns="http://www.w3.org/1999/xhtml">>
<xsl:output encoding="GB2312" indent="yes" method="html" version="4.0"/>
<xsl:template match="mm:menu_items" xmlns:mm="http://www.hz-sp.com/2005/XMLSchema-menu">
  <table width="900" border="0" cellspacing="0" cellpadding="0">
  <tr>
   <xsl:for-each select="mm:menu_item">
   <a href="{@href}">
    <img src="{@image}" width="113" height="57" border="0"/>
   </a>
   </xsl:for-each>
  </tr>
  </table>
</xsl:template>
</xsl:stylesheet>


令人恼火的是,xpath-default-namespace="http://www.hz-sp.com/2005/XMLSchema-menu" 对 xsl:template 的 match 没有效果,估计match 中并非 xpath。但是这个属性对 for-each 中的 select 同样没有起作用,这就比较奇怪了,估计我还没有理解这个属性该怎么使用。

时间: 2024-08-03 03:36:05

同时使用xml、schema和xslt的例子的相关文章

同时使用 xml, schema 和 xslt 的例子

以前从来没有用过 schema, 这次希望能给我的 xml 文件加上 namespace, schema, 然后用 xslt 转换成 html, 没想到花了不少功夫.现在我把工作正常的结果记录下来,希望对大家有些帮助.先来看看我的 xml 文件.打算用来定义网页的菜单.<?xml version="1.0" encoding="GB2312"?><menu_items> <menu_item href="index.html&

一个简单的XML Schema的例子

xml 我们可以看到,DTD的语法相当复杂,并且它不符合XML文件的标准,自成一个体系.也就是说DTD文档本身并不是一个良好形式的XML文档,上面的关于DTD的介绍也仅仅是作了一个简介,目的是帮助大家能读懂DTD文件以及在必要时创建简单的DTD文件,因为现在很多的XML应用是建立在DTD之上的.另外一个代替DTD的就是W3C定义的Schema,Schema从字面意义上来说,可以翻译成模式.大纲.计划.规划等等.它的基本意思就是说为XML文档制定一种模式. Schema相对于DTD的明显好

一个简单的XML Schema例子

我们可以看到,DTD的语法相当复杂,并且它不符合XML文件的标准,自成一个体系.也就是说DTD文档本身并不是一个良好形式的XML文档,上面的关于DTD的介绍也仅仅是作了一个简介,目的是帮助大家能读懂DTD文件以及在必要时创建简单的DTD文件,因为现在很多的XML应用是建立在DTD之上的. 另外一个代替DTD的就是W3C定义的Schema,Schema从字面意义上来说,可以翻译成模式.大纲.计划.规划等等.它的基本意思就是说为XML文档制定一种模式. Schema相对于DTD的明显好处是XML

一个简单的XML Schema的例子_XML/RSS

我们可以看到,DTD的语法相当复杂,并且它不符合XML文件的标准,自成一个体系.也就是说DTD文档本身并不是一个良好形式的XML文档,上面的关于DTD的介绍也仅仅是作了一个简介,目的是帮助大家能读懂DTD文件以及在必要时创建简单的DTD文件,因为现在很多的XML应用是建立在DTD之上的. 另外一个代替DTD的就是W3C定义的Schema,Schema从字面意义上来说,可以翻译成模式.大纲.计划.规划等等.它的基本意思就是说为XML文档制定一种模式. Schema相对于DTD的明显好处

XML Schema介绍

XML Schema 是基于 XML 的 DTD 替代者. XML Schema 描述 XML 文档的结构. XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD). 什么是 XML Schema? XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD. XML Schema: 定义可出现在文档中的元素 定义可出现在文档中的属性 定义哪个元素是子元素 定义子元素的次序 定义子元素的数目 定义元素是否为空,或者是否

XML Schema学习初体会

xml 最近埋头苦读WMFC定义的接口1标准文档,其中对XML格式的定义都使用了XML Schema,由于XML Schema在很多方面都有很大的作用,大有取代DTD的趋势,所以在此写了一些学习笔记,有疏漏的地方请大家指正! XML Schema的其他方面偶就不在这里罗嗦了,直接进入主题,关于XML Schema的基本语法. XSDL(XML Schema定义语言)由元素.属性.命名空间和XML文档种的其他节点构成的. 一.XSD中的元素 XSD文档至少要包含:schema根元素和XML模式命名

XML Schema

xml XML Schema如同DTD一样是负责定义和描述XML文档的结构和内容模式.它可以定义XML文档中存在哪些元素和元素之间的关系,并且可以定义元素和属性的数据类型. 什么是XML Schema XML Schema如同DTD一样是负责定义和描述XML文档的结构和内容模式.它可以定义XML文档中存在哪些元素和元素之间的关系,并且可以定义元素和属性的数据类型. XML Schema本身是一个XML文档,它符合XML语法结构.可以用通用的XML解析器解析它. 回页首 为什么要使用Schema

XML Schema帮你建模(2)

xml 复合类型定义.元素和属性声明   在XML Schema中,对于那些允许元素有自己的内容,以及可以携带自身属性的复合类型与那些不能够有元素内容和属性的简单类型,它们的表示形式有着本质的不同.在实例文档中,对于能建立新的类型(无论简单和复杂)的定义和允许元素和属性有特定的名字和类型(无论是简单还是复杂)的声明,它们之间也有着显著的差别.在这一节中,将针对如何定义复合类型,以及如何声明使用复合类型的元素及其属性做较详细的描述.   在一个模式文档中,当需要定义新的复合类型的时候,应当使用co

XML Schema帮你建模(4)

xml 列表类型  除了使用简单类型中描述的原子类型(这些原子类型可用于组合成绝大多数的其它类型,包括其它的简单类型和复合类型)外,XML Schema中在简单类型范畴中还有列表类型(List Type)的概念.原子类型.列表类型以及联合类型,总称为简单类型.一个原子类型的值在XML Schema中是不可分割的.举例来说,NMTOKEN值US是不可分割的,US的任何部分,如字母S本身都是没有意义的.与之相比较,列表类型则是由一组原子类型组成,因此它的每一个部分(原子)本身都是有意义的.举例来说N