以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  在XSL中使用XPath的id()函数  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=69641)


--  作者:宇义
--  发布时间:11/20/2008 10:56:00 AM

--  在XSL中使用XPath的id()函数
id(string/node)
参数为字符串,则返回id等于此字符串的结点;
参数为结点集,则返回id等于结点集及所有子结点内容的结点集。

通过dtd声明id属性为ID,才可在xsl中正确的使用这个函数。

id函数是通过dtd中的声明辨认属性的,因此我们可以将xml文件中的id属性命名为任何名称(不推荐这么做)。

比如:

[code]
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="testid.xsl"?>
<!DOCTYPE root [
 <!ELEMENT label ANY >
 <!ATTLIST label id ID #REQUIRED>
]>
<root>
 <select>
  <select>edit</select>
  <select>
   <test>delete</test>
  </select>
 </select>
 <label id="edit">Edit</label>
 <label id="delete">Delete</label>
 <label id="date">Date</label>
</root>
[/code]

[code]
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/">
  <xsl:value-of select="id('date')" /><!--输出Date-->
  <xsl:value-of select="/root/label[@id = 'date']" /><!--等同于上一条-->
  <xsl:apply-templates select="id(root/select)" /><!--EditDelete-->
 </xsl:template>

</xsl:stylesheet>
[/code]

[此贴子已经被作者于2008-11-21 11:53:29编辑过]

--  作者:hexun831012
--  发布时间:11/20/2008 12:12:00 PM

--  
你确定,我没试过,我就觉得id()没用,也没啥意义,对Transform来说,跳到别的节点意义不大,呵呵
--  作者:宇义
--  发布时间:11/21/2008 11:52:00 AM

--  
我只是给出id函数在xsl中的用法,毕竟这要涉及到dtd中的定义,很多人想当然的以为只要是id属性就可以了。他是否有意义,有什么用,不做讨论。
--  作者:hexun831012
--  发布时间:11/21/2008 12:18:00 PM

--  
你说的对
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms