如何同时使用xml、schema和xslt

小编给大家分享一下如何同时使用xml、schema和xslt,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

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

如何同时使用xml、schema和xslt

<?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”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-03-13 15:40:33
收藏
分享
海报
0 条评论
164
上一篇:怎么使用XML Schema定义元素 下一篇:如何使用XSL和ASP在线编辑XML文档
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码