如何同时使用xml、schema和xslt
小编给大家分享一下如何同时使用xml、schema和xslt,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
先来看看我的 xml 文件。打算用来定义网页的菜单。
<?xmlversion="1.0"encoding="GB2312"?> <menu_items> <menu_itemhref="index.html"image="images/A1.gif"name="首页"/> <menu_itemhref="ep.html"image="images/A2.gif"name="新闻"> <menu_itemhref="ep.html"image="images/A2.gif"name="国内新闻"/> </menu_item> </menu_items>
很简单的 xml 文件,抛开弯路不提,用 xmlspy 的 Generate Schema 功能自动生成 schema 文件,然后做些小修改,结果如下:
<?xmlversion="1.0"encoding="GB2312"?> <xs:schemaxmlns="http://www.hz-sp.com/2005/XMLSchema-menu"xmlns:xs=" targetNamespace="http://www.hz-sp.com/2005/XMLSchema-menu"> <xs:elementname="menu_item"> <xs:complexType> <xs:sequence> <xs:elementref="menu_item"minOccurs="0"/> </xs:sequence> <xs:attributename="name"type="xs:string"use="required"/> <xs:attributename="href"type="xs:anyURI"use="optional"/> <xs:attributename="image"type="xs:anyURI"use="optional"/> </xs:complexType> </xs:element> <xs:elementname="menu_items"> <xs:complexType> <xs:sequence> <xs:elementref="menu_item"maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
其中,然后在xml中用xmlspy 的Assign Schema 功能指定这个 xsd ,xml 中的根节点 menu_items 被为:
<menu_itemsxmlns="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 文件,同样只给出正确的结果:
<?xmlversion="1.0"encoding="GB2312"?> <xsl:stylesheetxpath-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:outputencoding="GB2312"indent="yes"method="html"version="4.0"/> <xsl:templatematch="mm:menu_items"xmlns:mm="http://www.hz-sp.com/2005/XMLSchema-menu"> <tablewidth="900"border="0"cellspacing="0"cellpadding="0"> <tr> <xsl:for-eachselect="mm:menu_item"> <ahref="{@href}"> <imgsrc="{@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 同样没有起作用,这就比较奇怪了,估计我还没有理解这个属性该怎么使用。
以上是“如何同时使用xml、schema和xslt”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
「原创」PHP实战-XML详细教程
-
在PHP中使用SPL库中的对象方法进行XML与数组的转换
虽说现在很多的服务提供商都会提供JSON接口供我们使用,但是,还是有不少的服务依然必须使用XML作为接口格式,这就需...
-
深入学习PHP中的JSON相关函数
在我们当年刚刚上班的那个年代,还全是XML的天下,但现在JSON数据格式已经是各种应用传输的事实标准了。最近几年开始学习...
-
wps打开word文件出现无法打开因为内容有问题的解决办法
-
php将xml转化对象的实例详解
XML文件$xml="123456";将文件转换成对象$objectxml=simplexml_load_...
-
Android中如何自定义xml属性
Android中如何自定义xml属性这篇“Android中如何自定...
-
.NET中XML序列化和反序列化常用类和属性是什么
.NET中XML序列化和反序列化常用类和属性是什么这篇“.NET中...
-
C#中XML文件内容增删改查的方法
C#中XML文件内容增删改查的方法本篇内容介绍了“C#中XML文件...
-
Python如何实现xml格式转txt格式
-
AJAX怎么使用XML文件进行交互式通信
AJAX怎么使用XML文件进行交互式通信本文小编为大家详细介绍“A...