以前从来没有用过 schema, 这次希望能给我的 xml 文件加上 namespace, schema, 然后用 http://www.php.cn/wiki/1529.html" target="_blank">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="  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>

其中,然后在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-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 同样没有起作用,这就比较奇怪了,估计我还没有理解这个属性该怎么使用。

更多相关文章

  1. 详解xmlhttp组件获取远程文件并筛选出目标数据
  2. xml文件如何编辑的详情介绍
  3. 教你如何打开xml文件的详解
  4. XML文件要有根标签(错误)的代码解决分享
  5. xml的属性总结代码详情
  6. 读取XML文件时报“前言中不允许有内容”错误处理办法详解
  7. 解析XML文件的几种方式对比的详细介绍
  8. XML文件使用SAX方法读取的示例代码
  9. XML文件使用DOM方法读取的示例代码

随机推荐

  1. 导入Android SDK中Sample下ApiDemos报错
  2. Android 自定义控件高度设置onMeasure方
  3. Python 3.3.2 +在android上
  4. 提取Launcher中的WorkSapce,可以左右滑动
  5. Android Gradle实用技巧——多渠道打包
  6. Android 实现APP开屏广告
  7. android代码混淆 GSON完满解决
  8. 分析谷歌收购摩托罗拉无线对移动产业带来
  9. 使用webview调起QQ临时会话
  10. Android学习之DexClassLoader类装载器使