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

此生只为言郎醉

此生只为言郎醉

2016-02-19 16:27

下面图老师小编要向大家介绍下同时使用 xml, schema 和 xslt 的例子,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

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

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)
?xml version="1.0" encoding="GB2312"?menu_itemsmenu_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:elementxs: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 被为:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)
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-menumenu.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 同样没有起作用,这就比较奇怪了,估计我还没有理解这个属性该怎么使用。

展开更多 50%)
分享

猜你喜欢

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

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

一个简单的XML Schema的例子

Web开发
一个简单的XML Schema的例子

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在 XML Schema和WSDL中使用名称空间

电脑网络
在 XML Schema和WSDL中使用名称空间

iOS中使用schema协议调用APP和使用iframe打开APP的例子

编程语言 网络编程
iOS中使用schema协议调用APP和使用iframe打开APP的例子

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用XSLT和XML改进Struts

编程语言 网络编程
用XSLT和XML改进Struts

XML简明教程第6课 使用XML Schema

Web开发
XML简明教程第6课 使用XML Schema

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何节省XP系统内存 加快系统开机速度

如何节省XP系统内存 加快系统开机速度

一个记事本的源程序

一个记事本的源程序
下拉加载更多内容 ↓